diff --git a/packages/contracts/contracts/CyberDropBase.sol b/packages/contracts/contracts/CyberDropBase.sol index 3fc5d92..c869a7f 100644 --- a/packages/contracts/contracts/CyberDropBase.sol +++ b/packages/contracts/contracts/CyberDropBase.sol @@ -15,6 +15,11 @@ contract CyberDropBase is CyberTokenBase { event DropCreated(address indexed account, uint256 indexed tokenId); + modifier noContract() { + require(msg.sender == tx.origin, 'NC'); + _; + } + function dropMintCounter(uint256 _tokenId, address _minter) external view @@ -99,12 +104,11 @@ contract CyberDropBase is CyberTokenBase { emit DropCreated(sender, tokenId); } - function mint( + function mintInternal( uint256 _tokenId, uint256 _quantity, - bytes memory _signature - ) external payable returns (bool success) { - address sender = _msgSender(); + address minter + ) internal returns (bool success) { LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId]; require(drop.amountCap - drop.minted >= _quantity, 'CR'); @@ -116,34 +120,86 @@ contract CyberDropBase is CyberTokenBase { require(msg.value == drop.price * _quantity, 'IA'); - uint256 senderDropNonce = drop.mintCounter[sender].current(); + // Effects + drop.minted += _quantity; + drop.mintCounter[minter].increment(); + _safeMint(minter, _tokenId, _quantity, ''); + + if (drop.price > 0) { + uint256 amountOnCyber = (msg.value * drop.shareCyber) / 100; + uint256 amountCreator = msg.value - amountOnCyber; + + drop.creator.transfer(amountCreator); + payable(LibAppStorage.layout().oncyber).transfer(amountOnCyber); + } + + emit Minted(minter, _tokenId, _quantity); + + return true; + } + + function mint( + uint256 _tokenId, + uint256 _quantity, + bytes memory _signature + ) external payable returns (bool success) { + address sender = _msgSender(); + uint256 senderDropNonce = LibDropStorage + .layout() + .drops[_tokenId] + .mintCounter[sender] + .current(); + bytes memory _message = abi.encodePacked( _tokenId, _quantity, sender, senderDropNonce ); - LibAppStorage.Layout storage layout = LibAppStorage.layout(); address recoveredAddress = keccak256(_message) .toEthSignedMessageHash() .recover(_signature); - require(recoveredAddress == layout.manager, 'NM'); + require(recoveredAddress == LibAppStorage.layout().manager, 'NM'); - // Effects - drop.minted += _quantity; - drop.mintCounter[sender].increment(); - _safeMint(sender, _tokenId, _quantity, ''); + return mintInternal(_tokenId, _quantity, sender); + } - if (drop.price > 0) { - uint256 amountOnCyber = (msg.value * drop.shareCyber) / 100; - uint256 amountCreator = msg.value - amountOnCyber; + function mintRandom(uint256[] calldata _tokenIds, bytes memory _signature) + external + payable + noContract + returns (bool success) + { + address sender = _msgSender(); + uint256 index = random(_tokenIds.length, sender); - drop.creator.transfer(amountCreator); - payable(layout.oncyber).transfer(amountOnCyber); - } + bytes memory _message = abi.encodePacked(_tokenIds, sender); + address recoveredAddress = keccak256(_message) + .toEthSignedMessageHash() + .recover(_signature); + require(recoveredAddress == LibAppStorage.layout().manager, 'NM'); - emit Minted(sender, _tokenId, _quantity); + return mintInternal(_tokenIds[index], 1, sender); + } - return true; + function random(uint256 _max, address _sender) + public + view + returns (uint256 number) + { + uint256 seed = uint256( + keccak256( + abi.encodePacked( + block.timestamp + + block.difficulty + + block.gaslimit + + block.number + + (uint256(keccak256(abi.encodePacked(block.coinbase))) / + block.timestamp) + + (uint256(keccak256(abi.encodePacked(_sender))) / block.timestamp) + ) + ) + ); + return (seed - ((seed / _max) * _max)); } } diff --git a/packages/contracts/contracts/Test/DropRandomCaller.sol b/packages/contracts/contracts/Test/DropRandomCaller.sol new file mode 100644 index 0000000..a63547c --- /dev/null +++ b/packages/contracts/contracts/Test/DropRandomCaller.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.13; + +//import 'hardhat/console.sol'; +import '../CyberDropBase.sol'; + +contract DropRandomCaller { + function testMintRandom( + CyberDropBase _cyberDropBase, + uint256[] calldata _tokenIds, + bytes memory _signature + ) external payable { + _cyberDropBase.mintRandom{value: msg.value}(_tokenIds, _signature); + } +} diff --git a/packages/contracts/lib/utils.ts b/packages/contracts/lib/utils.ts index 49049ee..db8998a 100644 --- a/packages/contracts/lib/utils.ts +++ b/packages/contracts/lib/utils.ts @@ -65,3 +65,19 @@ export async function signMintRequest( return signer.signMessage(pHash) } + +export async function signMintRandomRequest( + tokenIds: number[], + creator: string, + signer: Signer +): Promise { + const pTokenIds = tokenIds.map((tokenId) => + utils.hexZeroPad(BigNumber.from(tokenId).toHexString(), 32) + ) + const pCreator = utils.arrayify(creator) + const message = utils.concat([...pTokenIds, pCreator]) + const hash = utils.keccak256(message) + const pHash = utils.arrayify(hash) + + return signer.signMessage(pHash) +} diff --git a/packages/contracts/scripts/mint.ts b/packages/contracts/scripts/mint.ts index f29036e..bb5fac8 100644 --- a/packages/contracts/scripts/mint.ts +++ b/packages/contracts/scripts/mint.ts @@ -17,7 +17,8 @@ async function main() { ) const tokenId = 0 const quantity = 1 - const mintPrice = await contract.getMintPriceForToken(tokenId) + const drop = await contract.getDrop(tokenId) + const mintPrice = drop.price.mul(quantity) const signatureMint = await signMintRequest( tokenId, diff --git a/packages/contracts/scripts/mintRandom.ts b/packages/contracts/scripts/mintRandom.ts new file mode 100644 index 0000000..db6e4eb --- /dev/null +++ b/packages/contracts/scripts/mintRandom.ts @@ -0,0 +1,50 @@ +// @ts-ignore-next-line +import { deployments, ethers } from 'hardhat' +import { signMintRandomRequest } from '../lib/utils' + +async function main() { + const contractName = 'DiamondCyberDestinationFactory' + + const accounts = await ethers.getSigners() + const minter = accounts[3] + const manager = accounts[2] + + const Contract = await deployments.get(contractName) + const contract = await ethers.getContractAt( + Contract.abi, + Contract.address, + minter + ) + const tokenIds = [1, 2, 3] + const drop = await contract.getDrop(tokenIds[1]) + const mintPrice = drop.price + + const signatureMintRandom = await signMintRandomRequest( + tokenIds, + minter.address, + manager + ) + + const estimation = await contract.estimateGas.mintRandom( + tokenIds, + signatureMintRandom, + { + value: mintPrice, + } + ) + + const tx = await contract.mintRandom(tokenIds, signatureMintRandom, { + value: mintPrice, + gasLimit: estimation.mul(100).div(90), + }) + + const txReceipt = await tx.wait() + console.log('txReceipt', txReceipt) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) diff --git a/packages/contracts/test/cyberDropBase.spec.ts b/packages/contracts/test/cyberDropBase.spec.ts index 8544b19..bd8a227 100644 --- a/packages/contracts/test/cyberDropBase.spec.ts +++ b/packages/contracts/test/cyberDropBase.spec.ts @@ -1,17 +1,20 @@ -import { expect } from 'chai' +import { assert, expect } from 'chai' import { BigNumber, utils } from 'ethers' import { ethers, deployments, getNamedAccounts } from 'hardhat' -import { signCreateDropRequest, signMintRequest, tokenURI } from '../lib/utils' +import { + signCreateDropRequest, + signMintRandomRequest, + signMintRequest, + tokenURI, +} from '../lib/utils' -const memory: any = {} +let memory: any = {} describe('CyberDropBase', function () { - before(async () => { - memory.signers = await ethers.getSigners() - }) - beforeEach(async () => { + memory = {} + memory.signers = await ethers.getSigners() memory.namedAccounts = await getNamedAccounts() await deployments.fixture() @@ -1372,6 +1375,177 @@ describe('CyberDropBase', function () { }) }) + describe('Random', () => { + it('Should get random', async () => { + expect(await memory.contract.random(2, memory.other.address)).to.be.lt(2) + expect(await memory.contract.random(2, memory.other.address)).to.be.gte(0) + expect(await memory.contract.random(1, memory.other.address)).to.be.eq(0) + }) + }) + + describe('mintRandom', () => { + beforeEach(async () => { + memory.tokenIds = [0, 1, 2] + memory.mintPrice = BigNumber.from(100) + memory.shareCyber = 50 + for (let i = 0; i < 3; i++) { + const uri = 'Qmsfzefi221ifjzifj' + const timeStart = parseInt((Date.now() / 1000 - 1000).toString()) + const timeEnd = parseInt((Date.now() / 1000 + 10000).toString()) + const amountCap = 10 + const signatureDrop = await signCreateDropRequest( + uri, + timeStart, + timeEnd, + memory.mintPrice, + amountCap, + memory.shareCyber, + memory.other.address, + i, + memory.manager + ) + + await memory.contract + .connect(memory.other) + .createDrop( + uri, + timeStart, + timeEnd, + memory.mintPrice, + amountCap, + memory.shareCyber, + signatureDrop + ) + } + }) + + it('Should mint random', async () => { + const otherBalance = await ethers.provider.getBalance( + memory.other.address + ) + const oncyberBalance = await ethers.provider.getBalance( + memory.oncyber.address + ) + const signatureMintRandom = await signMintRandomRequest( + memory.tokenIds, + memory.other2.address, + memory.manager + ) + + await memory.contract + .connect(memory.other2) + .mintRandom(memory.tokenIds, signatureMintRandom, { + value: memory.mintPrice, + }) + + let findOne = false + + await Promise.all( + memory.tokenIds.map(async (tokenId: number) => { + const balance = await memory.contract.balanceOf( + memory.other2.address, + tokenId + ) + + if (!balance.eq(0)) { + if (findOne) { + throw new Error('Mint more than one') + } + findOne = true + expect(balance).to.be.eq('1') + expect( + await ethers.provider.getBalance(memory.other.address) + ).to.eq( + otherBalance.add( + memory.mintPrice.sub( + memory.mintPrice.div(100 / memory.shareCyber) + ) + ) + ) + expect( + await ethers.provider.getBalance(memory.oncyber.address) + ).to.eq( + oncyberBalance.add(memory.mintPrice.div(100 / memory.shareCyber)) + ) + + const drop = await memory.contract.getDrop(tokenId) + expect(drop.minted).to.eq('1') + } + }) + ) + + assert(findOne, 'Mint nothing') + }) + + it('Should mint random throw when call from contract', async () => { + const deployResult = await deployments.deploy('DropRandomCaller', { + from: memory.deployer.address, + }) + const contract = await ethers.getContractAt( + 'DropRandomCaller', + deployResult.address + ) + const signatureMintRandom = await signMintRandomRequest( + memory.tokenIds, + memory.other2.address, + memory.manager + ) + + await expect( + contract + .connect(memory.other2) + .testMintRandom( + memory.contract.address, + memory.tokenIds, + signatureMintRandom, + { + value: memory.mintPrice, + } + ) + ).to.be.revertedWith('NC') + }) + + it("Can't mint random with invalid signature", async () => { + // Invalid manager + const signatureMintRandomInvalidManager = await signMintRandomRequest( + memory.tokenIds, + memory.other2.address, + memory.other3 + ) + await expect( + memory.contract + .connect(memory.other2) + .mintRandom(memory.tokenIds, signatureMintRandomInvalidManager, { + value: memory.mintPrice, + }) + ).to.be.revertedWith('NM') + + const signatureMintRandom = await signMintRandomRequest( + memory.tokenIds, + memory.other2.address, + memory.manager + ) + + // Invalid minter + await expect( + memory.contract + .connect(memory.other) + .mintRandom(memory.tokenIds, signatureMintRandom, { + value: memory.mintPrice, + }) + ).to.be.revertedWith('NM') + + // Invalid token ids + await expect( + memory.contract + .connect(memory.other) + .mintRandom([1], signatureMintRandom, { + value: memory.mintPrice, + }) + ).to.be.revertedWith('NM') + }) + }) + describe('DropMintCounter', () => { it('Should get drop mint counter greater than zero if drop exist', async () => { const uri = 'Qmsfzefi221ifjzifj' diff --git a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts index f6ce459..4527c9f 100644 --- a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts @@ -32,8 +32,10 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { "isTrustedForwarder(address)": FunctionFragment; "manager()": FunctionFragment; "mint(uint256,uint256,bytes)": FunctionFragment; + "mintRandom(uint256[],bytes)": FunctionFragment; "minterNonce(address)": FunctionFragment; "oncyber()": FunctionFragment; + "random(uint256,address)": FunctionFragment; "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; @@ -93,8 +95,16 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { functionFragment: "mint", values: [BigNumberish, BigNumberish, BytesLike] ): string; + encodeFunctionData( + functionFragment: "mintRandom", + values: [BigNumberish[], BytesLike] + ): string; encodeFunctionData(functionFragment: "minterNonce", values: [string]): string; encodeFunctionData(functionFragment: "oncyber", values?: undefined): string; + encodeFunctionData( + functionFragment: "random", + values: [BigNumberish, string] + ): string; encodeFunctionData( functionFragment: "safeBatchTransferFrom", values: [string, string, BigNumberish[], BigNumberish[], BytesLike] @@ -151,11 +161,13 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { ): Result; decodeFunctionResult(functionFragment: "manager", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintRandom", data: BytesLike): Result; decodeFunctionResult( functionFragment: "minterNonce", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "oncyber", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "random", data: BytesLike): Result; decodeFunctionResult( functionFragment: "safeBatchTransferFrom", data: BytesLike @@ -371,6 +383,12 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -378,6 +396,12 @@ export interface CyberDestinationFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise<[string]>; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise<[BigNumber] & { number: BigNumber }>; + safeBatchTransferFrom( from: string, to: string, @@ -513,10 +537,22 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -649,10 +685,22 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -840,10 +888,22 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -962,6 +1022,12 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -969,6 +1035,12 @@ export interface CyberDestinationFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, diff --git a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts index d4db9dd..2bc08bb 100644 --- a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts @@ -33,8 +33,10 @@ export interface CyberDestinationUtilityFactoryFacetInterface "isTrustedForwarder(address)": FunctionFragment; "manager()": FunctionFragment; "mint(uint256,uint256,bytes)": FunctionFragment; + "mintRandom(uint256[],bytes)": FunctionFragment; "minterNonce(address)": FunctionFragment; "oncyber()": FunctionFragment; + "random(uint256,address)": FunctionFragment; "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; @@ -94,8 +96,16 @@ export interface CyberDestinationUtilityFactoryFacetInterface functionFragment: "mint", values: [BigNumberish, BigNumberish, BytesLike] ): string; + encodeFunctionData( + functionFragment: "mintRandom", + values: [BigNumberish[], BytesLike] + ): string; encodeFunctionData(functionFragment: "minterNonce", values: [string]): string; encodeFunctionData(functionFragment: "oncyber", values?: undefined): string; + encodeFunctionData( + functionFragment: "random", + values: [BigNumberish, string] + ): string; encodeFunctionData( functionFragment: "safeBatchTransferFrom", values: [string, string, BigNumberish[], BigNumberish[], BytesLike] @@ -152,11 +162,13 @@ export interface CyberDestinationUtilityFactoryFacetInterface ): Result; decodeFunctionResult(functionFragment: "manager", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintRandom", data: BytesLike): Result; decodeFunctionResult( functionFragment: "minterNonce", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "oncyber", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "random", data: BytesLike): Result; decodeFunctionResult( functionFragment: "safeBatchTransferFrom", data: BytesLike @@ -372,6 +384,12 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -379,6 +397,12 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise<[string]>; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise<[BigNumber] & { number: BigNumber }>; + safeBatchTransferFrom( from: string, to: string, @@ -514,10 +538,22 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -650,10 +686,22 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -841,10 +889,22 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -963,6 +1023,12 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -970,6 +1036,12 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, diff --git a/packages/contracts/typechain-types/CyberDropBase.ts b/packages/contracts/typechain-types/CyberDropBase.ts index 7ba12fe..ef01b84 100644 --- a/packages/contracts/typechain-types/CyberDropBase.ts +++ b/packages/contracts/typechain-types/CyberDropBase.ts @@ -32,8 +32,10 @@ export interface CyberDropBaseInterface extends utils.Interface { "isTrustedForwarder(address)": FunctionFragment; "manager()": FunctionFragment; "mint(uint256,uint256,bytes)": FunctionFragment; + "mintRandom(uint256[],bytes)": FunctionFragment; "minterNonce(address)": FunctionFragment; "oncyber()": FunctionFragment; + "random(uint256,address)": FunctionFragment; "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; @@ -93,8 +95,16 @@ export interface CyberDropBaseInterface extends utils.Interface { functionFragment: "mint", values: [BigNumberish, BigNumberish, BytesLike] ): string; + encodeFunctionData( + functionFragment: "mintRandom", + values: [BigNumberish[], BytesLike] + ): string; encodeFunctionData(functionFragment: "minterNonce", values: [string]): string; encodeFunctionData(functionFragment: "oncyber", values?: undefined): string; + encodeFunctionData( + functionFragment: "random", + values: [BigNumberish, string] + ): string; encodeFunctionData( functionFragment: "safeBatchTransferFrom", values: [string, string, BigNumberish[], BigNumberish[], BytesLike] @@ -151,11 +161,13 @@ export interface CyberDropBaseInterface extends utils.Interface { ): Result; decodeFunctionResult(functionFragment: "manager", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintRandom", data: BytesLike): Result; decodeFunctionResult( functionFragment: "minterNonce", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "oncyber", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "random", data: BytesLike): Result; decodeFunctionResult( functionFragment: "safeBatchTransferFrom", data: BytesLike @@ -371,6 +383,12 @@ export interface CyberDropBase extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -378,6 +396,12 @@ export interface CyberDropBase extends BaseContract { oncyber(overrides?: CallOverrides): Promise<[string]>; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise<[BigNumber] & { number: BigNumber }>; + safeBatchTransferFrom( from: string, to: string, @@ -513,10 +537,22 @@ export interface CyberDropBase extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -649,10 +685,22 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -840,10 +888,22 @@ export interface CyberDropBase extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -962,6 +1022,12 @@ export interface CyberDropBase extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -969,6 +1035,12 @@ export interface CyberDropBase extends BaseContract { oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, diff --git a/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts b/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts index 56ddaf5..a4d6960 100644 --- a/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts @@ -32,8 +32,10 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { "isTrustedForwarder(address)": FunctionFragment; "manager()": FunctionFragment; "mint(uint256,uint256,bytes)": FunctionFragment; + "mintRandom(uint256[],bytes)": FunctionFragment; "minterNonce(address)": FunctionFragment; "oncyber()": FunctionFragment; + "random(uint256,address)": FunctionFragment; "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; @@ -93,8 +95,16 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { functionFragment: "mint", values: [BigNumberish, BigNumberish, BytesLike] ): string; + encodeFunctionData( + functionFragment: "mintRandom", + values: [BigNumberish[], BytesLike] + ): string; encodeFunctionData(functionFragment: "minterNonce", values: [string]): string; encodeFunctionData(functionFragment: "oncyber", values?: undefined): string; + encodeFunctionData( + functionFragment: "random", + values: [BigNumberish, string] + ): string; encodeFunctionData( functionFragment: "safeBatchTransferFrom", values: [string, string, BigNumberish[], BigNumberish[], BytesLike] @@ -151,11 +161,13 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { ): Result; decodeFunctionResult(functionFragment: "manager", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintRandom", data: BytesLike): Result; decodeFunctionResult( functionFragment: "minterNonce", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "oncyber", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "random", data: BytesLike): Result; decodeFunctionResult( functionFragment: "safeBatchTransferFrom", data: BytesLike @@ -371,6 +383,12 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -378,6 +396,12 @@ export interface CyberObjectFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise<[string]>; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise<[BigNumber] & { number: BigNumber }>; + safeBatchTransferFrom( from: string, to: string, @@ -513,10 +537,22 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -649,10 +685,22 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -840,10 +888,22 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce(_minter: string, overrides?: CallOverrides): Promise; oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, @@ -962,6 +1022,12 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; + mintRandom( + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + minterNonce( _minter: string, overrides?: CallOverrides @@ -969,6 +1035,12 @@ export interface CyberObjectFactoryFacet extends BaseContract { oncyber(overrides?: CallOverrides): Promise; + random( + _max: BigNumberish, + _sender: string, + overrides?: CallOverrides + ): Promise; + safeBatchTransferFrom( from: string, to: string, diff --git a/packages/contracts/typechain-types/DropRandomCaller.ts b/packages/contracts/typechain-types/DropRandomCaller.ts new file mode 100644 index 0000000..9215d86 --- /dev/null +++ b/packages/contracts/typechain-types/DropRandomCaller.ts @@ -0,0 +1,110 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export interface DropRandomCallerInterface extends utils.Interface { + contractName: "DropRandomCaller"; + functions: { + "testMintRandom(address,uint256[],bytes)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "testMintRandom", + values: [string, BigNumberish[], BytesLike] + ): string; + + decodeFunctionResult( + functionFragment: "testMintRandom", + data: BytesLike + ): Result; + + events: {}; +} + +export interface DropRandomCaller extends BaseContract { + contractName: "DropRandomCaller"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: DropRandomCallerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + testMintRandom( + _cyberDropBase: string, + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + }; + + testMintRandom( + _cyberDropBase: string, + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + callStatic: { + testMintRandom( + _cyberDropBase: string, + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + testMintRandom( + _cyberDropBase: string, + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + testMintRandom( + _cyberDropBase: string, + _tokenIds: BigNumberish[], + _signature: BytesLike, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts index 40751b5..fb42931 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts @@ -478,6 +478,30 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "mintRandom", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, { inputs: [ { @@ -510,6 +534,30 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "_max", + type: "uint256", + }, + { + internalType: "address", + name: "_sender", + type: "address", + }, + ], + name: "random", + outputs: [ + { + internalType: "uint256", + name: "number", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -705,7 +753,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613deb806100206000396000f3fe6080604052600436106101745760003560e01c8063572b6c05116100cb578063b3a721d11161007f578063e751c98111610059578063e751c98114610527578063e985e9c514610547578063f242432a146105bc57600080fd5b8063b3a721d11461049d578063bc01188e146104bd578063bd85b0391461050757600080fd5b80636dcfd841116100b05780636dcfd8411461043057806385bff2e71461045d578063a22cb4651461047d57600080fd5b8063572b6c051461036a5780636787d449146103c557600080fd5b806313ba55df1161012d5780632eb2c2d6116101075780632eb2c2d6146102b2578063481c6a75146102d25780634e1273f41461033d57600080fd5b806313ba55df1461023e57806318160ddd1461025e5780631b0239471461029257600080fd5b806308dc9f421161015e57806308dc9f42146101dc5780630b885ac3146101ef5780630e89341c1461021157600080fd5b8062fdd58e1461017957806301ffc9a7146101ac575b600080fd5b34801561018557600080fd5b50610199610194366004613187565b6105dc565b6040519081526020015b60405180910390f35b3480156101b857600080fd5b506101cc6101c73660046131df565b6105f1565b60405190151581526020016101a3565b6101cc6101ea36600461330f565b61064a565b3480156101fb57600080fd5b5061020f61020a36600461335f565b610ab4565b005b34801561021d57600080fd5b5061023161022c3660046133df565b610cf8565b6040516101a3919061346e565b34801561024a57600080fd5b506101996102593660046133df565b610e50565b34801561026a57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6054610199565b34801561029e57600080fd5b506101996102ad366004613481565b610e5b565b3480156102be57600080fd5b5061020f6102cd366004613531565b610ea5565b3480156102de57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a3565b34801561034957600080fd5b5061035d6103583660046135db565b610f9f565b6040516101a391906136e1565b34801561037657600080fd5b506101cc610385366004613481565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff90811691161490565b3480156103d157600080fd5b506103e56103e03660046133df565b6111fa565b604080519788526020880196909652948601939093526060850191909152608084015273ffffffffffffffffffffffffffffffffffffffff1660a083015260c082015260e0016101a3565b34801561043c57600080fd5b5061045061044b3660046133df565b6112d4565b6040516101a391906136f4565b34801561046957600080fd5b5061035d610478366004613481565b6112df565b34801561048957600080fd5b5061020f61049836600461374e565b6112ea565b3480156104a957600080fd5b506101996104b836600461378a565b61142b565b3480156104c957600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a625473ffffffffffffffffffffffffffffffffffffffff16610318565b34801561051357600080fd5b506101996105223660046133df565b6114db565b34801561053357600080fd5b506101996105423660046137b6565b61150e565b34801561055357600080fd5b506101cc61056236600461384a565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832093909416825291909152205460ff1690565b3480156105c857600080fd5b5061020f6105d7366004613874565b611892565b60006105e88383611985565b90505b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604081205460ff166105eb565b600080610655611a64565b60008681527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260409020600681015460038201549293509091869161069c91613908565b10156106ef5760405162461bcd60e51b815260206004820152600260248201527f435200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b805442118015610703575080600101544211155b61074f5760405162461bcd60e51b815260206004820152600360248201527f4f4f54000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b84816002015461075f919061391f565b34146107ad5760405162461bcd60e51b815260206004820152600260248201527f494100000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260078201602090815260408083205481519283018a9052908201889052606085811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690830152607482018190529190609401604051602081830303815290604052905060006108577f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90565b905060006108c3886108bd85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611ae5565b825490915073ffffffffffffffffffffffffffffffffffffffff80831691161461092f5760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b88856006016000828254610943919061395c565b909155505073ffffffffffffffffffffffffffffffffffffffff86166000908152600786016020526040902080546001019055610991868b8b60405180602001604052806000815250611b09565b600285015415610a5f57600060648660040154346109af919061391f565b6109b99190613974565b905060006109c78234613908565b600588015460405191925073ffffffffffffffffffffffffffffffffffffffff169082156108fc029083906000818181858888f19350505050158015610a11573d6000803e3d6000fd5b50600484015460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f19350505050158015610a5b573d6000803e3d6000fd5b5050505b888a8773ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a45060019998505050505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610b3a5760405162461bcd60e51b815260206004820152600260248201527f4e4f00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fd9b67a26000000000000000000000000000000000000000000000000000000006000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f845f7f8d885943dffdc1524acbd9538b2923f93aad26d306df3b8982c7f0632d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c3485611b2a565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5f8054938616938216939093179092557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a628054919094169116179091555050565b60008181527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c836020526040812080546060929190610d35906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906139af565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505090508051600003610e065760405162461bcd60e51b815260206004820152601d60248201527f455243313135355552493a20746f6b656e4964206e6f7420657869737400000060448201526064016106e6565b604051610e39907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c84908390602001613a1e565b604051602081830303815290604052915050919050565b60006105eb82611b60565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6160205260408120546105eb565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f18575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b610f8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611b96565b5050505050565b606081518351146110185760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106e6565b82517f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b9060009067ffffffffffffffff81111561105757611057613203565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b50905060005b85518110156111f157600073ffffffffffffffffffffffffffffffffffffffff168682815181106110b9576110b9613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361114a5760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106e6565b82600086838151811061115f5761115f613afb565b60200260200101518152602001908152602001600020600087838151811061118957611189613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106111de576111de613afb565b6020908102919091010152600101611086565b50949350505050565b60008181527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482918291829182918291829182036112865760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b805460018201546002830154600384015460048501546005860154600690960154949e939d50919b509950975073ffffffffffffffffffffffffffffffffffffffff90921695509350915050565b60606105eb82611bba565b60606105eb82611c93565b73ffffffffffffffffffffffffffffffffffffffff821633036113755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106e6565b3360008181527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008281527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482036114ab5760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600782016020526040902054949350505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea60205260408120546105eb565b60008061151b8888613908565b116115685760405162461bcd60e51b815260206004820152600260248201527f495400000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60648311156115b95760405162461bcd60e51b815260206004820152600360248201527f49534f000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b600084116116095760405162461bcd60e51b815260206004820152600360248201527f494143000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e6000611634611a64565b9050600061164182610e5b565b905060008b8b8b8b8b8b8888604051602001611664989796959493929190613b2a565b604051602081830303815290604052905060006116d9876108bd84805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b855490915073ffffffffffffffffffffffffffffffffffffffff8083169116146117455760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60028501549550611756868e611d69565b6117668560020180546001019055565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260038601602052604090208054600101905560007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe659600101600088815260200190815260200160002090508c81600001819055508b81600101819055508a8160020181905550898160030181905550888160040181905550848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480611905575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b6119775760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611dac565b600073ffffffffffffffffffffffffffffffffffffffff8316611a105760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016106e6565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff95909516845293905250205490565b600060183610801590611aad57507fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff1633145b15611add57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b503390565b90565b6000806000611af48585611dc8565b91509150611b0181611e36565b509392505050565b611b1584848484612025565b611b243360008686868661218c565b50505050565b8051611b5c907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c849060208401906130c5565b5050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206105eb906123d1565b611ba48686868686866123db565b611bb28686868686866126e3565b505050505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb60205260408120606091611bf3826123d1565b67ffffffffffffffff811115611c0b57611c0b613203565b604051908082528060200260200182016040528015611c34578160200160208202803683370190505b50905060005b611c43836123d1565b811015611b0157611c548382612876565b828281518110611c6657611c66613afb565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611c3a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec60205260408120606091611ce3826123d1565b67ffffffffffffffff811115611cfb57611cfb613203565b604051908082528060200260200182016040528015611d24578160200160208202803683370190505b50905060005b611d33836123d1565b811015611b0157611d448382612876565b828281518110611d5657611d56613afb565b6020908102919091010152600101611d2a565b60008281527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c83602090815260409091208251611da7928401906130c5565b505050565b611dba868686868686612882565b611bb286868686868661218c565b6000808251604103611dfe5760208301516040840151606085015160001a611df287828585612a88565b94509450505050611e2f565b8251604003611e275760208301516040840151611e1c868383612ba0565b935093505050611e2f565b506000905060025b9250929050565b6000816004811115611e4a57611e4a613b97565b03611e525750565b6001816004811115611e6657611e66613b97565b03611eb35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106e6565b6002816004811115611ec757611ec7613b97565b03611f145760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106e6565b6003816004811115611f2857611f28613b97565b03611f9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6004816004811115611faf57611faf613b97565b036120225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b50565b73ffffffffffffffffffffffffffffffffffffffff84166120ae5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6120cd336000866120be87612bf2565b6120c787612bf2565b86612c3d565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120805484929061212b90849061395c565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906122039089908990889088908890600401613bc6565b6020604051808303816000875af192505050801561225c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261225991810190613c16565b60015b61231157612268613c33565b806308c379a0036122a1575061227c613c4e565b8061228757506122a3565b8060405162461bcd60e51b81526004016106e6919061346e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106e6565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b50505050505050565b60006105eb825490565b73ffffffffffffffffffffffffffffffffffffffff84166124645760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b81518351146124db5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106e6565b6124e9868686868686612c3d565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60005b845181101561265b57600085828151811061252a5761252a613afb565b60200260200101519050600085838151811061254857612548613afb565b6020908102919091018101516000848152868352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156125fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008381526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320938590039093558a16815290812080546001959095019483929061264e90849061395c565b9091555061250d92505050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126d2929190613cf6565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061275a9089908990889088908890600401613d1b565b6020604051808303816000875af19250505080156127b3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526127b091810190613c16565b60015b6127bf57612268613c33565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b60006105e88383612c4b565b73ffffffffffffffffffffffffffffffffffffffff841661290b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b61291a8686866120be87612bf2565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020818152604080842073ffffffffffffffffffffffffffffffffffffffff8a16855290915290912054838110156129e05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008581526020838152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093879003909355871681529081208054859290612a2c90849061395c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8088169289821692918b16917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016126d2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612abf5750600090506003612b97565b8460ff16601b14158015612ad757508460ff16601c14155b15612ae85750600090506004612b97565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9057600060019250925050612b97565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831681612bd660ff86901c601b61395c565b9050612be487828885612a88565b935093505050935093915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c2c57612c2c613afb565b602090810291909101015292915050565b611bb2868686868686612cec565b81546000908210612cc45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b826000018281548110612cd957612cd9613afb565b9060005260206000200154905092915050565b611bb28686868686868373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611bb25773ffffffffffffffffffffffffffffffffffffffff85811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040808220928716825281207fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea927fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb929091905b8751811015612f22576000878281518110612dda57612dda613afb565b602002602001015190506000811115612f19576000898381518110612e0157612e01613afb565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603612e685760008181526020889052604081208054849290612e5d90849061395c565b90915550612e9d9050565b81612e738d83611985565b03612e9d576000818152602087905260409020612e90908d612f2f565b50612e9b8582612f51565b505b73ffffffffffffffffffffffffffffffffffffffff8b16612ee15760008181526020889052604081208054849290612ed6908490613908565b90915550612f179050565b612eeb8b82611985565b600003612f17576000818152602087905260409020612f0a908c612f5d565b50612f158482612f7f565b505b505b50600101612dbd565b5050505050505050505050565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416612f8b565b60006105e88383612f8b565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416613076565b60006105e88383613076565b6000818152600183016020526040812054801561306c57835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612fdb57612fdb613afb565b906000526020600020015490508085600001600184038154811061300157613001613afb565b600091825260208083209091019290925591825260018601905260409020819055835484908061303357613033613d86565b600190038181906000526020600020016000905590558360010160008481526020019081526020016000206000905560019150506105eb565b60009150506105eb565b60008181526001830160205260408120546130bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105eb565b5060006105eb565b8280546130d1906139af565b90600052602060002090601f0160209004810192826130f35760008555613139565b82601f1061310c57805160ff1916838001178555613139565b82800160010185558215613139579182015b8281111561313957825182559160200191906001019061311e565b50613145929150613149565b5090565b5b80821115613145576000815560010161314a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461318257600080fd5b919050565b6000806040838503121561319a57600080fd5b6131a38361315e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461202257600080fd5b6000602082840312156131f157600080fd5b81356131fc816131b1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561327657613276613203565b6040525050565b600082601f83011261328e57600080fd5b813567ffffffffffffffff8111156132a8576132a8613203565b6040516132dd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182613232565b8181528460208386010111156132f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561332457600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561334957600080fd5b6133558682870161327d565b9150509250925092565b600080600080600060a0868803121561337757600080fd5b853567ffffffffffffffff81111561338e57600080fd5b61339a8882890161327d565b9550506133a96020870161315e565b93506133b76040870161315e565b92506133c56060870161315e565b91506133d36080870161315e565b90509295509295909350565b6000602082840312156133f157600080fd5b5035919050565b60005b838110156134135781810151838201526020016133fb565b83811115611b245750506000910152565b6000815180845261343c8160208601602086016133f8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e86020830184613424565b60006020828403121561349357600080fd5b6105e88261315e565b600067ffffffffffffffff8211156134b6576134b6613203565b5060051b60200190565b600082601f8301126134d157600080fd5b813560206134de8261349c565b6040516134eb8282613232565b83815260059390931b850182019282810191508684111561350b57600080fd5b8286015b84811015613526578035835291830191830161350f565b509695505050505050565b600080600080600060a0868803121561354957600080fd5b6135528661315e565b94506135606020870161315e565b9350604086013567ffffffffffffffff8082111561357d57600080fd5b61358989838a016134c0565b9450606088013591508082111561359f57600080fd5b6135ab89838a016134c0565b935060808801359150808211156135c157600080fd5b506135ce8882890161327d565b9150509295509295909350565b600080604083850312156135ee57600080fd5b823567ffffffffffffffff8082111561360657600080fd5b818501915085601f83011261361a57600080fd5b813560206136278261349c565b6040516136348282613232565b83815260059390931b850182019282810191508984111561365457600080fd5b948201945b838610156136795761366a8661315e565b82529482019490820190613659565b9650508601359250508082111561368f57600080fd5b5061369c858286016134c0565b9150509250929050565b600081518084526020808501945080840160005b838110156136d6578151875295820195908201906001016136ba565b509495945050505050565b6020815260006105e860208301846136a6565b6020808252825182820181905260009190848201906040850190845b8181101561374257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613710565b50909695505050505050565b6000806040838503121561376157600080fd5b61376a8361315e565b91506020830135801515811461377f57600080fd5b809150509250929050565b6000806040838503121561379d57600080fd5b823591506137ad6020840161315e565b90509250929050565b600080600080600080600060e0888a0312156137d157600080fd5b873567ffffffffffffffff808211156137e957600080fd5b6137f58b838c0161327d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a013591508082111561382e57600080fd5b5061383b8a828b0161327d565b91505092959891949750929550565b6000806040838503121561385d57600080fd5b6138668361315e565b91506137ad6020840161315e565b600080600080600060a0868803121561388c57600080fd5b6138958661315e565b94506138a36020870161315e565b93506040860135925060608601359150608086013567ffffffffffffffff8111156138cd57600080fd5b6135ce8882890161327d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561391a5761391a6138d9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613957576139576138d9565b500290565b6000821982111561396f5761396f6138d9565b500190565b6000826139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c908216806139c357607f821691505b6020821081036139fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008151613a148185602086016133f8565b9290920192915050565b600080845481600182811c915080831680613a3a57607f831692505b60208084108203613a72577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015613a865760018114613ab557613ae2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650613ae2565b60008b81526020902060005b86811015613ada5781548b820152908501908301613ac1565b505084890196505b505050505050613af28185613a02565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008951613b3c818460208e016133f8565b91909101978852506020870195909552604086019390935260608086019290925260808501521b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a083015260b482015260d401919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152613c0b60a0830184613424565b979650505050505050565b600060208284031215613c2857600080fd5b81516131fc816131b1565b600060033d1115611ae25760046000803e5060005160e01c90565b600060443d1015613c5c5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613caa57505050505090565b8285019150815181811115613cc25750505050505090565b843d8701016020828501011115613cdc5750505050505090565b613ceb60208286010187613232565b509095945050505050565b604081526000613d0960408301856136a6565b8281036020840152613af281856136a6565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152613d5460a08301866136a6565b8281036060840152613d6681866136a6565b90508281036080840152613d7a8185613424565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220be681edaa0b908e1768d60ae599881e5bf4464f27d3fbc2347ab952ef17424b164736f6c634300080d0033"; + "0x60806040523480156200001157600080fd5b5061843d80620000226000396000f3fe60806040526004361061018a5760003560e01c80636787d449116100d6578063b3a721d11161007f578063e751c98111610059578063e751c9811461060a578063e985e9c514610647578063f242432a146106845761018a565b8063b3a721d114610565578063bc01188e146105a2578063bd85b039146105cd5761018a565b806385bff2e7116100b057806385bff2e7146104c25780638b349f3e146104ff578063a22cb4651461053c5761018a565b80636787d449146104125780636dcfd841146104555780637cafe690146104925761018a565b806318160ddd11610138578063481c6a7511610112578063481c6a751461036d5780634e1273f414610398578063572b6c05146103d55761018a565b806318160ddd146102dc5780631b023947146103075780632eb2c2d6146103445761018a565b80630b885ac3116101695780630b885ac3146102395780630e89341c1461026257806313ba55df1461029f5761018a565b8062fdd58e1461018f57806301ffc9a7146101cc57806308dc9f4214610209575b600080fd5b34801561019b57600080fd5b506101b660048036038101906101b19190615fda565b6106ad565b6040516101c39190616029565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee919061609c565b6106c1565b60405161020091906160e4565b60405180910390f35b610223600480360381019061021e9190616245565b6106e4565b60405161023091906160e4565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190616355565b610aef565b005b34801561026e57600080fd5b50610289600480360381019061028491906163ec565b61103f565b60405161029691906164a1565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906163ec565b6112ee565b6040516102d39190616029565b60405180910390f35b3480156102e857600080fd5b506102f1611300565b6040516102fe9190616029565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906164c3565b61139e565b60405161033b9190616029565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906165b8565b61147b565b005b34801561037957600080fd5b5061038261150f565b60405161038f9190616696565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190616774565b6115c6565b6040516103cc91906168aa565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906164c3565b6117ba565b60405161040991906160e4565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906163ec565b6118a1565b60405161044c97969594939291906168cc565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906163ec565b611afc565b60405161048991906169f9565b60405180910390f35b6104ac60048036038101906104a79190616a76565b611b0e565b6040516104b991906160e4565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906164c3565b612050565b6040516104f691906168aa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190616af2565b612062565b6040516105339190616029565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190616b5e565b612238565b005b34801561057157600080fd5b5061058c60048036038101906105879190616af2565b6123ac565b6040516105999190616029565b60405180910390f35b3480156105ae57600080fd5b506105b76125f3565b6040516105c49190616696565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906163ec565b6126aa565b6040516106019190616029565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190616b9e565b6126bc565b60405161063e9190616029565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190616c78565b6132b8565b60405161067b91906160e4565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190616cb8565b613355565b005b60006106b983836133e9565b905092915050565b60006106dd826106cf6134bb565b6134e890919063ffffffff16565b9050919050565b60006107127f69504125a65169bd9ace52315659eeee937ddd4bdf618acb15b713c78401f4c660001b613553565b61073e7faccfc096572c7e3ed3d231dedc6edbc08a8ee7083c56c5fd017fabaf408f082460001b613553565b61076a7f0412321e6c9f536996f3f40453a005c4a3083c4f9eec273735177ceb17b6140560001b613553565b6000610774613556565b90506107a27ff8a6a702a83871e3f896c8eefc0893b7963981937e76884b4f11c7fb499f3b4760001b613553565b6107ce7f02b993527cae523365a22f9447d194978d7ac0f3027271eb30eba924a9a8b00460001b613553565b60006108346107db6136f2565b600101600088815260200190815260200160002060070160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b90506108627f46cd84591a45d31f4753b1f27eada9b11731243cfee8d0e487bb9af6ca20184160001b613553565b61088e7f9d81882fab1e488e996969ec23d09cb97622605bb4d508942af0117cabd1b20b60001b613553565b6000868684846040516020016108a79493929190616db8565b60405160208183030381529060405290506108e47f14a417097b723638a61d8ae753622c1a23209652bf53c528647ca4fbbbd8d17e60001b613553565b6109107f036e543f4b650565194810827e1fc02784e8df335cdac436aee78be36726a56a60001b613553565b60006109348661092684805190602001206137de565b61380e90919063ffffffff16565b90506109627f5b07bba82364645d0d258d29b0de5613380bf36abc1216f1412b2bc393ade5c660001b613553565b61098e7fe169306b6ec3dbbdc82a15559d389711c2171fbc553cc50e407c2e22ced0863260001b613553565b6109ba7fa2f66755fcdc1651ea119ea6965a4a2a02fed2ed5b54717e112662b0c39e7caa60001b613553565b6109c2613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90616e52565b60405180910390fd5b610a7f7f9b3a9722eff62304e4422ed0f66887e99a718588c3a44bbabb55d5595f05160760001b613553565b610aab7f11e03f72ffc8988cbdb454ed20e69f714fed69060ed900ee7e2c7e94ae52dcc060001b613553565b610ad77f2c4240edf1288e6ac4b00dbcf5088b9764c0fde3fbac31357ddb1ea812fd025360001b613553565b610ae2888886613913565b9450505050509392505050565b610b1b7f1e4f3db61d02d43f745245c64298d7f0c1a3e8708559b6670d4ca42c54514f4460001b614280565b610b477f0ac4986fe6d4c3895c8ef5e03bf2b121d82e6cf32614c4c5189671928b98f8e360001b614280565b610b737f145960e0b8e54656e42c3b088b3a10b57bf051eb1c4bb726aa3f9ccfaa056f1c60001b614280565b610b9f7f901a5d83ad9e5900a26fb984a5a99dc96974734dd64371311e5ca412033f4aa560001b614280565b3373ffffffffffffffffffffffffffffffffffffffff16610bbe614283565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90616ebe565b60405180910390fd5b610c647fb7cd82f2e96c1e329917e6a6f329bab37f4868e3a34f88a3ae05f88fe1899b6e60001b614280565b610c907fb5ae9824ef1c4b9d1c19baecf68dbac5d61b7d6069bf88af80ad92642241b4d260001b614280565b610cbc7ff115cefef55a500dd4e6296e9a3d6cc0e8dc3d6712feb6c7f9f051ca69614aa860001b614280565b82610cc5614361565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d327fd72402da254f9ba5a463e2015cebe357527e12a62cd25ecae2e2921778ddc3cb60001b614280565b610d5e7f543c25cfe85aa6f8c53e60eaa7f95103d121790ecad586cf733b8a8818b76f7960001b614280565b6001610d68614283565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610e1d7f18d24b611c0380c8df6354eea02a5a82d3b36fea45384921c977b440fbbeae9f60001b614280565b610e497fe0a44e89e5938bc342f25b353520510937291eb9dcca1342977aa3ec3eda8fc060001b614280565b610e528561443f565b610e7e7fc7c1929af15c5b3153f6eeb8ca93a8874a8cc881a6d885786447b173c210d63460001b614280565b610eaa7f720f9f9246e75a85b11fea637347797614847368b50cbf3d6962eb4bff9a58bf60001b614280565b83610eb3613835565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f207f42fa96a8febb97c55f95796d3fb0d21c410d5ab5adf4ace2d87a196cc4dc3f9760001b614280565b610f4c7fd44b3d45ab725ff9a331429e51865d518e4343c4f6bcdfeeca70765aa2ee70eb60001b614280565b81610f55613835565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc27f1eb6094a4ff364bc1205590533550d7e1d18bb4fc33971eb49a6c38f5c349b1d60001b614280565b610fee7fd671a9abc380ff64132a5a282180f649887bc6379ff36cf2c62463e383d3749b60001b614280565b80610ff7613835565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606061106d7f1c3b8ce455b2ad4634a6bde830f371ccaa9a60a47f7530d5559c60059ac6796360001b6144e6565b6110997f744faa1a7f641981fd5340120b41026f6255d60e762e83a56d1f5e25ace615c060001b6144e6565b6110c57f7ddf9d337eeac748c812ff0c191bca0bd9ad27c607ff6276c26efb1d10350ff960001b6144e6565b60006110cf6144e9565b600001600084815260200190815260200160002080546110ee90616f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90616f0d565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905061119a7f31479a340477a3cd3ddd8874968c9b56fbb69a24bd62655bb14254f5e8b6b66f60001b6144e6565b6111c67fb07081f26262d7615671a199ff1ec98be27284b5bbb83db432041ec57553afce60001b6144e6565b6111f27f6f3823429822313601553d8d17013e3cb264da9b810dc4d78587e834dde5ca1060001b6144e6565b6000815103611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90616f8a565b60405180910390fd5b6112627f0758b40c742a6fadcdad3a342e6f0185a043afcf936f6a1f430cfe0a2895409f60001b6144e6565b61128e7fd00b5f2990c6e433c54a778edb076d4dd783ae43a208d2bd579c3e8b8fec22ff60001b6144e6565b6112ba7fac6e807513b0bd038c04f48a60fcaa1ca589bda2965c00a45f99327340337f7060001b6144e6565b6112c26144e9565b600101816040516020016112d792919061707a565b604051602081830303815290604052915050919050565b60006112f9826145c7565b9050919050565b600061132e7fa33d91318f77fb95d2fe4386c2678c14692f4adf788a72bcf2e6161f1537a0df60001b614280565b61135a7f261f9308b795e5a1107f3e9f410b1729e5552cbec6ef68eb8baeb4101526ac8160001b614280565b6113867fc3b939dd6c5215c8cbeda83887c1c350b1860f6de8924882ae7d062b377db98860001b614280565b611399611391613835565b6002016137d0565b905090565b60006113cc7fae1f162029218081da04bc8ad4cc45c451cdd486a41807dfddaa697cdb51db7760001b614280565b6113f87fec18d1e30aaf675a2d5fed1149a973e710441a8383555ea0ffb7ee515f1cd24660001b614280565b6114247f5fad527e5d3d69e8dc7332a6976fecc95c52e88dffc8d20b259e135cb58c4bf660001b614280565b61147461142f613835565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bb57506114ba85336132b8565b5b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190617110565b60405180910390fd5b6115083386868686866145f4565b5050505050565b600061153d7f340aa1274e9ed6d73309ff2182f3df83aa741ede424aa35a2849a2c2144894d360001b614280565b6115697f21d1933df3a4a8fa207ebb584b97eb52ab398c4a1cfec85eb03e5f5f6d1ccf5e60001b614280565b6115957fa7c174764dca473b275d9b1190c3b7f15c9dd7d692ab10c1b9267a4fc13a517b60001b614280565b61159d613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906171a2565b60405180910390fd5b6000611616614618565b60000190506000845167ffffffffffffffff8111156116385761163761611a565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b85518110156117ae57600073ffffffffffffffffffffffffffffffffffffffff168682815181106116a05761169f6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590617263565b60405180910390fd5b826000868381518110611714576117136171c2565b5b60200260200101518152602001908152602001600020600087838151811061173f5761173e6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611795576117946171c2565b5b602002602001018181525050808060010191505061166c565b50809250505092915050565b60006117e87fc51b1a04fdf35d4961d655a2e9df2e144166121cdbbd5fcebcda1d4fb6b4afd760001b614645565b6118147f160a64ca27fca7833fe2c155dbc48620377746ad27e180a793134a8b523ea11160001b614645565b6118407ff7ead2e2d6d8c6b4cb4e64bda1cd535361e99fb0ae87d56950d3fc237d1c83e760001b614645565b611848614361565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008060008060006118d87f465fa96a026591afcc73eedf68b5c234111d787bdef224abefbea5f24a6304f660001b613553565b6119047f1a2d192b6ae8580c21449edc18a5c5189abd26b541b43023a7c74f72a23c7be160001b613553565b6119307fcd678e9c959426ff304e44b1af5415d33309a2109427d6ac8491e166b7cb976860001b613553565b600061193a6136f2565b60010160008a8152602001908152602001600020905061197c7fa4b18d81fa899abf513b4e95a051fcd93b2e51d2ed12e1653a1014ce1c00c26460001b613553565b6119a87f83f8325adf643554750cc9e87bae0a5049ec04d2429bacf59c3f9b1108b6884b60001b613553565b6119d47fa4cf44de82e0fd6de50eb99a5e6c9948927be4018461e0737f597b075268826960001b613553565b6000816003015403611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a12906172cf565b60405180910390fd5b611a477f90f8613cbb087340bcca2584e180c5bb0e2901934a061edf860c6dd48c6e76fc60001b613553565b611a737f6ababc2cd4db007b37cf61708a8c9bf1d76d283de7b4eee8b3ed1ced58be40cf60001b613553565b611a9f7f204e74a6d17e8e13984367216650a7a0fe40d524672370a1fa43770fa3b43bcc60001b613553565b806000015481600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060154975097509750975097509750975050919395979092949650565b6060611b0782614648565b9050919050565b6000611b3c7ff24834d51a1c359dacb2d97c14e2fcffc7464051ec52e708ad5863881d6f35da60001b613553565b611b687f7669ffee594535e6f33a4689f9303c5b0be52f7684b56230d794f5750bf5994960001b613553565b611b947ff79b90c16015f799c056f5ef78549f157c8d9c905ffb99eb847d6072ede6f2e460001b613553565b611bc07feb4ed2cbd35ed9850baae47a508cba57a82490d1bb12ebd37e0f3c36f128f31760001b613553565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c259061733b565b60405180910390fd5b611c5a7f7b03635d50a2ac6a2176f76edc64adf6be2cf6903326ad1b85fa61c9d7bf0af260001b613553565b611c867f4e6fc0202bd1107ef1dd2be5a6683c8d6936d2d1c9fec2a089f5d8b8dc92407f60001b613553565b611cb27f9ffb1814439e241f271bc61198718d53cd81db521ea4b918e03143e1aaa2711860001b613553565b611cde7fb8c98bda67af8c290643ba4efdae96f986c3aaec8665c4a5f692f7be2be7fbb360001b613553565b611d0a7f0928c4062428db501eb41553c8d2b14b4940048b02c8701abf121fd545d7238860001b613553565b6000611d14613556565b9050611d427f15b143cbdb1ab87d35daa7e35136263eff53fba20d7c7bb58ba41d93c564cd2e60001b613553565b611d6e7f19a3e3512e07676e18e589506dc158d80b5d7cb3beac1bd9433961c241f15ed260001b613553565b6000611d7d8686905083612062565b9050611dab7f3cdc773ec7a0bbfac9bb175b96dac685fe84427e3e8817908be364e7e19d958e60001b613553565b611dd77f898fd03dc07b76f3fb4a9ad96a6d4ae4938ee88b1b9ae0d839c6fb75851d487160001b613553565b6000868684604051602001611dee939291906173c7565b6040516020818303038152906040529050611e2b7ffa2d084e5aa3bb9d552106093bb156ed767efd13d4ef769f45a1c608608db9ad60001b613553565b611e577fb4adb993f0112309e0dda211c3c872be6fc1e8e1e24c2737bcca45864f4992fc60001b613553565b6000611e7b86611e6d84805190602001206137de565b61380e90919063ffffffff16565b9050611ea97f3385f8936d3613b10a69cd465c8105b4160dd4bb6150da1a8c527fa7bed06c7360001b613553565b611ed57fbedc4adb23e940e294388ee7224af083de5e3284529ef41d6ce9930033a07b5e60001b613553565b611f017fcaf9c7508b1d2979a5c86ba62715d43dcc60bf70be5b83327aaf3f862ff5513860001b613553565b611f09613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190616e52565b60405180910390fd5b611fc67f07a7bc365223ab36c77a4a9ea8ebe4b7b8d6231b8ae915ebad4c2f50b2f3d57260001b613553565b611ff27fe7ee1b5bed08b17973242e0848405f3c04f580944813fdbecff270770eb7d18260001b613553565b61201e7f94f361318dbc2681bc9996f924781ee86ece31f3436523b550f4d04cf3874fe660001b613553565b612043888885818110612034576120336171c2565b5b90506020020135600186613913565b9450505050509392505050565b606061205b8261474a565b9050919050565b60006120907f60765bedd401bd9b58bfa600b58a3868c5af8544f7e462831178bd883d38117860001b613553565b6120bc7f2b6a4ce8c1966ea92df90f6cbae66e288ec6448dc56286facce3dfeb13821f2960001b613553565b6120e87f1389e418c0a511e7e3eaa43e4d94e098cb9c042c036c05bc4d684f5125db491d60001b613553565b600042836040516020016120fc91906173f1565b6040516020818303038152906040528051906020012060001c61211f919061746a565b424160405160200161213191906174d6565b6040516020818303038152906040528051906020012060001c612154919061746a565b4345444261216291906174f1565b61216c91906174f1565b61217691906174f1565b61218091906174f1565b61218a91906174f1565b60405160200161219a9190617547565b6040516020818303038152906040528051906020012060001c90506121e17f5b21c6f2374698176296dfe2a8445e7fce913edb407c39cc7d5abab4c5d15b3e60001b613553565b61220d7f3d73192fe1bf95af8a0c91385764162dd6e965f6a777b8de1bd879bdf7de096060001b613553565b83848261221a919061746a565b6122249190617562565b8161222f91906175bc565b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90617662565b60405180910390fd5b806122af614618565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a091906160e4565b60405180910390a35050565b60006123da7f8de92a92eb4f534db65b0725a8a299eb59aca6138bd32c120bbb7dd57a3ab30960001b613553565b6124067fe613f2110dcf45672ce7ada28d0addc56fe733cc274f376124ed0fab09168f7960001b613553565b6124327f4b32fe64b1f0597ff9d8f100de6695d3b21da2485df357cdfa7c687dd882b1cb60001b613553565b600061243c6136f2565b6001016000858152602001908152602001600020905061247e7f333e5fe9b82539e577e6711e227ffb85f984985603e2dcd3b310181f1bcb4ea860001b613553565b6124aa7f2f8b9bc4af379bc9da65e0359701c93e42ca912183d8cfae8427a5607a2cac2b60001b613553565b6124d67f455c527fdc00c09c1476f596faf29cdbf259272fb5eb7bf373b98b5899d2f43260001b613553565b600081600301540361251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906172cf565b60405180910390fd5b6125497f3e6a4520705047fd60862a3b73db1fb921ab171e642d1ddafaccea0294370d6860001b613553565b6125757f43e347200895dc09f6b125f52292b2bbab2f2545f9cc7bc4d8c09c40219efcc760001b613553565b6125a17f9b4beade9509f38d5ffce5a7d5b78ca2a1e8ae892073a7b364f0e4841c25151a60001b613553565b6125ea8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b91505092915050565b60006126217f0619baf6ca8789a3e86f4aff6d89e719238ed3e720a6993e0accc89ca92b9d4860001b614280565b61264d7fdf5461867b8a8bd8fb4f7803cb9c246a7892adc5b2b475b1f75dba51b2182f7a60001b614280565b6126797faca8ec6ded37615fcf2cd5aa4063085146ed390b11503d1b7d2ea113fb25dd7660001b614280565b612681613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006126b58261484a565b9050919050565b60006126ea7f720938f99de2f11f86876804fff7292696d42b75131e9bac80c0a95c8e5a279060001b613553565b6127167fd806a38c7b5d62d6af24a70340f4e595ddc4623ea115bdb799dfe0d0bacb787160001b613553565b6127427f82e12f199f839c376058aa1ecc504c862f1e16b6ed3bd1b912be770073b6e20060001b613553565b61276e7f5df9890c32153a31c3071d9dc69e4ebe97acca3f7f7ef3e3f74d36b2a88bdef460001b613553565b6000878761277c91906175bc565b116127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906176ce565b60405180910390fd5b6127e87f0492531b4255db2bc8189f4589d26e800181076ba492c838b5ab11e715f2847f60001b613553565b6128147f6e5ae7c332c217ef76c88e8a3a828bedadc25fca4cd857c39daa1789d642e76460001b613553565b6128407fc14eca242eab0aa946075f409d9b8d9698598cf1acd8ae3f19d116a458ccca1f60001b613553565b61286c7f83f27d511f4a33dee6c8cbf58233412fc09cdf67ecf721d46504f311343567c460001b613553565b60648311156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a79061773a565b60405180910390fd5b6128dc7f159c847be75e9bd093bc13b4b6d370fecb5aa1579b8517b2c7e1cc9ad418293460001b613553565b6129087f25bb89bd30e8a1744b71ff33f22a31cc94de7bfaf120ff91eeeac9303ffb834b60001b613553565b6129347f1218d8f17309fb2483a89e7b7e97bfbcc02a3120794538df2dcbd723b527d66960001b613553565b6129607f32b4d025bdd90830de6a84d51a47fe77e74982bfdf3a2749f8a7a613dc06e37260001b613553565b600084116129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a906177a6565b60405180910390fd5b6129cf7f8285f477a723c9b64cfb7be4086753679ac95943cd4466441515be3486e8c53560001b613553565b6129fb7fcba34dcae13ecb803751a3823d65df04bb6dfdd36c62e9dc8019dd46a65bb7ed60001b613553565b612a277f751669b10886962e6900a9e69ce28663127762edbb446168c614741dc82ec4e060001b613553565b6000612a31613835565b9050612a5f7f8a14962ce2b3a5ce0d0137f7e30711ce4290c774a0ca46fa695933ee82d7ae1e60001b613553565b612a8b7fbbe952a07f813f8f03a63cfc960e05d3ba7b1eb47f08549e6cdff14eb60d4d1260001b613553565b6000612a95613556565b9050612ac37f54d3bc4c862888cb85715327572df775563a8a2d4adbe5599357afe9d87ca68460001b613553565b612aef7f2248fee24ebe4d855f90fdd22a450262412705d7526f17a5347c7f629cbc522760001b613553565b6000612afa8261139e565b9050612b287f4c42dfd24abad1c05a3f4f70b7946f0692bee8150918e59af57f0b3db5a6da4d60001b613553565b612b547ff913260939086e368089a839e0841d58895284bb43e1bbac925230740aa0334860001b613553565b60008b8b8b8b8b8b8888604051602001612b759897969594939291906177c6565b6040516020818303038152906040529050612bb27f4d2e27de565216e905e62ac14a701f0ebefa2898551ae6dd80ec8b39a1b073c960001b613553565b612bde7f357fc6ce39641fa002b9859340974f193937eec06e410b560ea8c55f9848b09d60001b613553565b6000612c0287612bf484805190602001206137de565b61380e90919063ffffffff16565b9050612c307f2b8bf47f9dd9ebf95a30441a56580e8c6cdd7a976113a0740a484f69a9f9a51f60001b613553565b612c5c7f7851e13dec3d128dcfdeeb450c4a98237c728693168cb2c30003cf2c555b722860001b613553565b612c887f6d62bde961a1df0136651e214e015a645c511ff369879102410ff00a635cc07a60001b613553565b8460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190616e52565b60405180910390fd5b612d467f7a6ac0a8027b1e93edac2ab8901c948f0e5517215e93b27144e72eb8dc10f06960001b613553565b612d727fe4aa691889ee30419eaeef0947141197b9fc44914eb9e0c9fec36bca603cf86960001b613553565b612d9e7f9d0520a90711ce6b354183a30cfb75a12d13ae3461231704edfcf5d387938f6160001b613553565b612daa856002016137d0565b9550612dd87ffc0c07e3520f96cfbe67b70729c3659036168bae15e56a7faeceb26da24d5dbb60001b613553565b612e047f5959b06c459141c8df2d02d9795dcb8305b253b4cbf36ff3f46c5854ad9e8d7160001b613553565b612e0e868e614870565b612e3a7f4a2a90ed8fd29ea0a282c73c2f1ab1a7b4ac5c3728df33028bb4ec6d7d653f6c60001b613553565b612e667f89952afdbe3ae446eabfd7530b5468afe7226c2f4d9f18bc9b77cbee2ea0a11f60001b613553565b612e7285600201614929565b612e9e7f10a46dfdbae3dd49d7a950ff9e6b688651f17200627cad1639593ee54228315e60001b613553565b612eca7f14c07fdaaadb84d75015844b053d5c42596ba04d5ef5314dc4b439e77d7a8d4160001b613553565b612f138560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b612f3f7ff4e567e7562911da39bffb81e288c8f975e497cd7150fccc6a2a2c68b5b9dafc60001b613553565b612f6b7ff8a191528b6fbe90d3cd26e4f22be7d31c75c8daab9998f0edb1d5b3d76bffba60001b613553565b6000612f756136f2565b60010160008881526020019081526020016000209050612fb77f640f3e9b22ce366c014d00c51198c0de837fcf06eb277dbe91c84f5a39727d5d60001b613553565b612fe37ff2a398dec87ced93ae3cbba671a8c4ce313b9d755fd551aade15e3a16e1e6ecb60001b613553565b8c81600001819055506130187f33e7fa782ec497815c75df409203e9e3a69200f4e1fa55b64da4d0f264f3dffb60001b613553565b6130447f603f4be081dabe4238dd480b37be18ef710d8e18c3469e52c0a6ddab00a8a61c60001b613553565b8b81600101819055506130797fbf288863ca6fddd32e879f4b79bd4dd425c392a5fcef5f983f8f08e1ef605b5060001b613553565b6130a57ff2a177ad06ef67b9717f15fcf34cc70f340b3cc6d6f14bb593e821bf9b06501160001b613553565b8a81600201819055506130da7ffcd4deeacae774eaeb62042d1a9e4b0cec53e040646d9619f79593144a07591d60001b613553565b6131067fd0eb1c6e1a157f4ecce99b20ed040702d0b4fd4b8cb95fb2fea84c089bfe3ea560001b613553565b89816003018190555061313b7fcfe1f9dd13cf2d9b481193f3cc530b6b1a8de05ccdd7d3924422faca7f18186260001b613553565b6131677fe545a543d3c586e2ab33ab06aa56cd973639d8eb2c241a55718cc08e064a9ea460001b613553565b88816004018190555061319c7f432f09bf2bbb2cfa048f0ac7c4f99231c483765887abc3c25dad6772b7f01b6d60001b613553565b6131c87fcb43f8134b94ad527bea6b907ab1a5290e282ab5ddd2a6f18f172b4d5f36e2a260001b613553565b848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132377f14faaeb3648c1d505407846e7c6b7679b19e9b2dc90e1d9097c5e2ae73aec88060001b613553565b6132637f60fcde9fb8e94a807ecff08d1f13c7c512e0331b52f71232068523e29dcab0bc60001b613553565b868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b60006132c2614618565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613395575061339485336132b8565b5b6133d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cb90617110565b60405180910390fd5b6133e233868686868661493f565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613450906178c6565b60405180910390fd5b613461614618565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b50565b60006135847f0fabcbadc4a10086619fdc1814df79dd4a107858f209f6d947174c48415bc30e60001b614645565b6135b07ff97eaa9356f2efcb5cb2effd46690d592ef2728f57d91a5d700a0e7160a8610f60001b614645565b6135dc7f91a20df0ed4ea76380ecab21b298646da37e59f23eabc0cba603b696f95fc95260001b614645565b60186000369050101580156135f657506135f5336117ba565b5b15613662576136277f9ce1aee594fa4a6ffea26291bd008baa8acfcecc91d62a5d1ad6f3dc69f1ae6860001b614645565b6136537f50849634e83f066fd0501cde170910f86107f0b23bd24d8ce1e297ffe212663960001b614645565b601436033560601c90506136ee565b61368e7fe0cdb04f9080e90b216f114284e970caeb1e86018be111e6ac076ec090965af160001b614645565b6136ba7fca7dcfacd32360eedca4bf35c474c6d2fe16fc049ebbc937fa5eb0cc2c64408560001b614645565b6136e67fcb673a6e911fca4f124234d139cf95e7fdec288e65dee5432335cf18e818103060001b614645565b3390506136ef565b5b90565b60006137207f5ce04ef2e9f839031f089bd076ce06e9b896a48675dc51b63cb4955c3d885e1e60001b614963565b61374c7fb5b59fb0f64986a01f06090b75f111e3919ff48e63ec85a92653657f361588ad60001b614963565b6137787f0e132ebeed99e77224bc55e57d440fd757f061699bad2ef5eff0f181fc8c93c760001b614963565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506137c97f457b16e77325cb925460189c13afe8380ab16f405ec2ae94094a29ef747143d260001b614963565b8091505090565b600081600001549050919050565b6000816040516020016137f1919061795d565b604051602081830303815290604052805190602001209050919050565b600080600061381d8585614966565b9150915061382a816149e7565b819250505092915050565b60006138637f621434c9fd2e8bba0ec1e8665c6852f4a9919372e89bb045ed4a46aee0a51fe460001b614bb3565b61388f7f563cb72bde513957c46c4fa0753bb9816050c133ed604584517c0f39a73e4eed60001b614bb3565b6138bb7f7f53722e1ed3903aa24ee1e622ad9a65b4217ee614f3685b860a52a8be9fc95760001b614bb3565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061390c7f3e1bdcbbbb16eabd821040291754918d2051e700c9a0133e121019f9de911ecd60001b614bb3565b8091505090565b60006139417f72efb1d40a976cae6eeae9e878b7b30d9a49a5cdd1ab47a739590880a294cec460001b613553565b61396d7fcf169b6a538dc0f6c0102feed0b37c54f672f3e681b5269dc99961f7c9801c3160001b613553565b6139997f2725c06dd82edbad3f9b872af6a16699bd282780be9bd922071dcbfbc52d295d60001b613553565b60006139a36136f2565b600101600086815260200190815260200160002090506139e57fed84f1a88251221452e61da921c1b9d7ed5b46b3d7f38adc2124217f80b4c05760001b613553565b613a117fa02fa8de6f13ca3baee48e7c621a464e34de7768755a1eba6dbb3f1e786891ce60001b613553565b613a3d7f9b07797a0047f1a2b2e4b7a9979a95d9fbb015f879b00e6d4a4a29469d3c58a560001b613553565b8381600601548260030154613a5291906175bc565b1015613a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8a906179cf565b60405180910390fd5b613abf7fcb40fa9eaab8061dabc4c511b9a94536ef501a174ee019c004a607ae8995185260001b613553565b613aeb7f66645bdcce296b125239319745699d993d6c819d43cdba8b5590e076b35817d260001b613553565b613b177f3814e112ad9231e1448ae67c1ba054d8935915728027d055249ab3a2874aa50d60001b613553565b613b437fc359b819cbf6abc9ffff042968bc9144b1b770bb16b8bb72111bcdd780cab06260001b613553565b806000015442118015613b5a575080600101544211155b613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090617a3b565b60405180910390fd5b613bc57fd294e1e74386a0df78f440313618ed73a03640b6d18e09da6f8c2131ad6384ff60001b613553565b613bf17f6f3a1b072b7cbcf96b8f486bc4f40e0a89db93f534dfcdc169a1900be3f4a1bb60001b613553565b613c1d7f2f1086299e035b64320074596a23768d4815ee96be84e80201eaeeb3188328a860001b613553565b613c497ffcc15ab5433ff92b3f86fbd6208ea4fd592f1d4ba1924a0902df190106170c0b60001b613553565b838160020154613c599190617562565b3414613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190617aa7565b60405180910390fd5b613cc67fec7aa35ac4c5d18865f9724057d532be47be3a3abfea493997833eb77ee599ba60001b613553565b613cf27fa81469beb7e3ae07c5eaf3902ff05920d276e1048c7d7e79678047abc5b2acdd60001b613553565b613d1e7fb5580bda63201eef46e1894f3354ae8234048c14ff0ab480eec3f030a4acbb6660001b613553565b83816006016000828254613d3291906174f1565b92505081905550613d657fd52882e36a1ad9ab5b750c4e7d191b0f1a855d2822c7a8070536389830309cdc60001b613553565b613d917fdfa403db413f5fba67cca52f1fb76479f1fd13a498328f86d6d0336db0ddfea760001b613553565b613dda8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b613e067f9e3bf88b4b5b6e504bc0b1b1310177ddc269a736f56bf73cc454088a54cb652460001b613553565b613e327fdb225c249b2e49c927b2a9d5ec1e9df5d04653a4e58125e4c69a75d46d4eab2b60001b613553565b613e4d83868660405180602001604052806000815250614bb6565b613e797f733caed6c410a8451c0bdd5a388c38a8bb22d226a1d58d6b2ad3be0f405d28fe60001b613553565b613ea57fc23e2a994cddb2835043be74384867ad8dd5eeea927ea7e5180208f983a9b29460001b613553565b60008160020154111561415257613ede7fc47bae03022c822ca2c6d9ca6d452c01eee2598acd60dbd76dd5ade7f00d37f660001b613553565b613f0a7fb71ae19af149b322d2bf51ad08027d1f67e589ddf89b71ed620aa0dd59aceb7660001b613553565b613f367f0457c7f73790240af84972ff8a82b68559af57f3f8a9dbf5c2e53ed03dd2907260001b613553565b60006064826004015434613f4a9190617562565b613f54919061746a565b9050613f827feec6d14385b21131966c80c452d808575f399b22e069110a60e09be7fb4a07a760001b613553565b613fae7f5d7cf90e8b67ffda5c86f2490eff2429c07d179d3d4a0d21e8b92d0b7a479a0260001b613553565b60008134613fbc91906175bc565b9050613fea7fb3513e574992c008466e9b30a8a6dcc4050e1570090ce65a8455b3c0117fdd5660001b613553565b6140167f68b96afc572ef1dfd8edba56f833f5841092fce6210d283eac03413c8df37aea60001b613553565b8260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614080573d6000803e3d6000fd5b506140ad7fbfa50c3de55e4441031b004d9472d9f431265501bc9cc2701ae2de73c8c020fd60001b613553565b6140d97fdfbe64df54971a58fd9cf29bf8da9241ca863845e2377fd7b88f8a19132d86db60001b613553565b6140e1613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561414a573d6000803e3d6000fd5b50505061417f565b61417e7fb45b90fd42a7ff2d68678a574cbec27dad17991519a6567b045aa604418423b660001b613553565b5b6141ab7f0d031380eb99469c9a9b657726f4b0b7eb51c1c9c87aa69acb27c14d86b44bf560001b613553565b6141d77f1de7d8267f4f82897b0b046701c263241bf2e099fd317b8e91e44fec0627fd1760001b613553565b83858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142487f12fcb7150f41d198cc560721d9fe4a8b9b9675b3c97296f71de583b19f20905f60001b613553565b6142747f51c910e3280240a9da13a26a918f1bdee1b640ef3f81c307a8181a8b85b8b51c60001b613553565b60019150509392505050565b50565b60006142b17f37178690aaa1dfd0c6c3d44a41adbe336ddf4e47b2b013705f748d17f953a4f960001b614bd7565b6142dd7fb61c1cab06bcac74cb6fcec39279be9822daecce53b0d226a7f55aaa4694a84160001b614bd7565b6143097f390cbf5b98e53b9eb14b6ef693414cb3bd075af27cf444b8236e59e0e311394260001b614bd7565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905061435a7f2e97ffd5dadbc67c0d3ba2581f455f642621064ef90f5a7cfc10aed47737e18660001b614bd7565b8091505090565b600061438f7fc12b04ea53e4473ef466818b7c8c94c90f6bd77205d7c9b82f6a5d4de196a6a960001b614bda565b6143bb7f89a1f54751c7a873ff3e8896571a78db56811d12ddf8d5d28efd5aa5386e903760001b614bda565b6143e77fdedee73f76c7a07a4b418b59e38145ca6423d0815832d433528f8a1d7b01551a60001b614bda565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390506144387f47b0161d8c57ec0e65647be2a620071b1a78d3a9606f10c9cd43c92ffe7741da60001b614bda565b8091505090565b61446b7f431bc7f452809a3732c5c1a0b6c51dcd24cd363bf1f82908d52d72546076378460001b6144e6565b6144977f52240686f143432fc52d707de7b9ed833ae7ca5093172522026947ac54409f8760001b6144e6565b6144c37f7327e968d0500ce8cdfbfe0fdf076e04cd8669b4e88c690338cd4426d8446aba60001b6144e6565b806144cc6144e9565b60010190805190602001906144e2929190615e8f565b5050565b50565b60006145177fa9f6d638cb34cb261597ae232ca47e1e05373b83d270d71d783851218479d26560001b614bdd565b6145437fb459fc962a4b7a702eeba11b454e002d1e5fe7f2f71ac0249e476d78be45e16e60001b614bdd565b61456f7f373e0f10c4bbfcba941e9d7478208b12b2e79e04105738322bffaa27a05a837260001b614bdd565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390506145c07f3b7a75e893a3d4e113ca24a01863558add93663b17f32ee1a0d99b5a4d4f7c1060001b614bdd565b8091505090565b60006145ed6145d4614be0565b6001016000848152602001908152602001600020614c0d565b9050919050565b614602868686868686614c22565b614610868686868686614f27565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b50565b60606000614654614be0565b60010160008481526020019081526020016000209050600061467582614c0d565b67ffffffffffffffff81111561468e5761468d61611a565b5b6040519080825280602002602001820160405280156146bc5781602001602082028036833780820191505090505b50905060005b6146cb83614c0d565b81101561473f576146e581846150fe90919063ffffffff16565b8282815181106146f8576146f76171c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506146c2565b508092505050919050565b60606000614756614be0565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006147a382615118565b67ffffffffffffffff8111156147bc576147bb61611a565b5b6040519080825280602002602001820160405280156147ea5781602001602082028036833780820191505090505b50905060005b6147f983615118565b81101561483f57614813818461512d90919063ffffffff16565b828281518110614826576148256171c2565b5b60200260200101818152505080806001019150506147f0565b508092505050919050565b6000614854614be0565b6000016000838152602001908152602001600020549050919050565b61489c7f714373bb2f2144c87b3e52bc60c4d5a7066b2e23d5bf408bcb9eaf24ccb9cf0260001b6144e6565b6148c87fa2db81b69fdf15a5c420c8ff9c6e3def280ef84cf31afa9558cd3f6c40b16f2660001b6144e6565b6148f47f0863a359a857d21a5d3981b95d1fc7d088b2420cf573ea197c0a39c7de02dd5760001b6144e6565b806148fd6144e9565b60000160008481526020019081526020016000209080519060200190614924929190615e8f565b505050565b6001816000016000828254019250508190555050565b61494d868686868686615147565b61495b8686868686866153be565b505050505050565b50565b60008060418351036149a75760008060006020860151925060408601519150606086015160001a905061499b87828585615595565b945094505050506149e0565b60408351036149d75760008060208501519150604085015190506149cc8683836156a1565b9350935050506149e0565b60006002915091505b9250929050565b600060048111156149fb576149fa617ac7565b5b816004811115614a0e57614a0d617ac7565b5b0315614bb05760016004811115614a2857614a27617ac7565b5b816004811115614a3b57614a3a617ac7565b5b03614a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a7290617b42565b60405180910390fd5b60026004811115614a8f57614a8e617ac7565b5b816004811115614aa257614aa1617ac7565b5b03614ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ad990617bae565b60405180910390fd5b60036004811115614af657614af5617ac7565b5b816004811115614b0957614b08617ac7565b5b03614b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b4090617c40565b60405180910390fd5b600480811115614b5c57614b5b617ac7565b5b816004811115614b6f57614b6e617ac7565b5b03614baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ba690617cd2565b60405180910390fd5b5b50565b50565b614bc284848484615700565b614bd1336000868686866153be565b50505050565b50565b50565b50565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614c1b82600001615883565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603614c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c8890617d64565b60405180910390fd5b8151835114614cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ccc90617df6565b60405180910390fd5b614ce3868686868686615894565b6000614ced614618565b600001905060005b8451811015614e9f576000858281518110614d1357614d126171c2565b5b602002602001015190506000858381518110614d3257614d316171c2565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dca90617e88565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380600101945050508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614e9191906174f1565b925050819055505050614cf5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614f16929190617ea8565b60405180910390a450505050505050565b614f468473ffffffffffffffffffffffffffffffffffffffff166158aa565b156150f6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401614f8c959493929190617f34565b6020604051808303816000875af1925050508015614fc857506040513d601f19601f82011682018060405250810190614fc59190617fb1565b60015b61506d57614fd4617feb565b806308c379a0036150305750614fe861800d565b80614ff35750615032565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161502791906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150649061810f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146150f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150eb906181a1565b60405180910390fd5b505b505050505050565b600061510d83600001836158bd565b60001c905092915050565b600061512682600001615883565b9050919050565b600061513c83600001836158bd565b60001c905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036151b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151ad90617d64565b60405180910390fd5b6151d48686866151c587615931565b6151ce87615931565b86615894565b60006151de614618565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561527a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161527190617e88565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461533091906174f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516153ad9291906181c1565b60405180910390a450505050505050565b6153dd8473ffffffffffffffffffffffffffffffffffffffff166158aa565b1561558d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016154239594939291906181ea565b6020604051808303816000875af192505050801561545f57506040513d601f19601f8201168201806040525081019061545c9190617fb1565b60015b6155045761546b617feb565b806308c379a0036154c7575061547f61800d565b8061548a57506154c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154be91906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154fb9061810f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461558b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615582906181a1565b60405180910390fd5b505b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156155d0576000600391509150615698565b601b8560ff16141580156155e85750601c8560ff1614155b156155fa576000600491509150615698565b60006001878787876040516000815260200160405260405161561f949392919061826f565b6020604051602081039080840390855afa158015615641573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361568f57600060019250925050615698565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6156e491906174f1565b90506156f287828885615595565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361576f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161576690618326565b60405180910390fd5b61578e3360008661577f87615931565b61578887615931565b86615894565b81615797614618565b600001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546157f791906174f1565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516158759291906181c1565b60405180910390a450505050565b600081600001805490509050919050565b6158a28686868686866159ab565b505050505050565b600080823b905060008111915050919050565b600081836000018054905011615908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158ff906183b8565b60405180910390fd5b82600001828154811061591e5761591d6171c2565b5b9060005260206000200154905092915050565b60606000600167ffffffffffffffff8111156159505761594f61611a565b5b60405190808252806020026020018201604052801561597e5781602001602082028036833780820191505090505b5090508281600081518110615996576159956171c2565b5b60200260200101818152505080915050919050565b6159b98686868686866159c1565b505050505050565b6159cf868686868686615c72565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614615c6a576000615a0c614be0565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015615c64576000878281518110615ac157615ac06171c2565b5b602002602001015190506000811115615c56576000898381518110615ae957615ae86171c2565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603615b5857818760000160008381526020019081526020016000206000828254615b4c91906174f1565b92505081905550615ba3565b81615b638d836133e9565b03615ba257615b8c8c876000848152602001908152602001600020615c7a90919063ffffffff16565b50615ba08186615caa90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1603615c0857818760000160008381526020019081526020016000206000828254615bfc91906175bc565b92505081905550615c54565b6000615c148c836133e9565b03615c5357615c3d8b876000848152602001908152602001600020615cc490919063ffffffff16565b50615c518185615cf490919063ffffffff16565b505b5b505b818060010192505050615aa3565b50505050505b505050505050565b505050505050565b6000615ca2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615d0e565b905092915050565b6000615cbc836000018360001b615d0e565b905092915050565b6000615cec836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615dfc565b905092915050565b6000615d06836000018360001b615dfc565b905092915050565b60008083600101600084815260200190815260200160002054905060008114615df057600084600001600186600001805490500381548110615d5357615d526171c2565b5b9060005260206000200154905080856000016001840381548110615d7a57615d796171c2565b5b906000526020600020018190555081856001016000838152602001908152602001600020819055505083600001805480615db757615db66183d8565b5b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050615df6565b60009150505b92915050565b6000615e088383615e6c565b615e61578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615e66565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054615e9b90616f0d565b90600052602060002090601f016020900481019282615ebd5760008555615f04565b82601f10615ed657805160ff1916838001178555615f04565b82800160010185558215615f04579182015b82811115615f03578251825591602001919060010190615ee8565b5b509050615f119190615f15565b5090565b5b80821115615f2e576000816000905550600101615f16565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615f7182615f46565b9050919050565b615f8181615f66565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b6000819050919050565b615fb781615fa4565b8114615fc257600080fd5b50565b600081359050615fd481615fae565b92915050565b60008060408385031215615ff157615ff0615f3c565b5b6000615fff85828601615f8f565b925050602061601085828601615fc5565b9150509250929050565b61602381615fa4565b82525050565b600060208201905061603e600083018461601a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61607981616044565b811461608457600080fd5b50565b60008135905061609681616070565b92915050565b6000602082840312156160b2576160b1615f3c565b5b60006160c084828501616087565b91505092915050565b60008115159050919050565b6160de816160c9565b82525050565b60006020820190506160f960008301846160d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61615282616109565b810181811067ffffffffffffffff821117156161715761617061611a565b5b80604052505050565b6000616184615f32565b90506161908282616149565b919050565b600067ffffffffffffffff8211156161b0576161af61611a565b5b6161b982616109565b9050602081019050919050565b82818337600083830152505050565b60006161e86161e384616195565b61617a565b90508281526020810184848401111561620457616203616104565b5b61620f8482856161c6565b509392505050565b600082601f83011261622c5761622b6160ff565b5b813561623c8482602086016161d5565b91505092915050565b60008060006060848603121561625e5761625d615f3c565b5b600061626c86828701615fc5565b935050602061627d86828701615fc5565b925050604084013567ffffffffffffffff81111561629e5761629d615f41565b5b6162aa86828701616217565b9150509250925092565b600067ffffffffffffffff8211156162cf576162ce61611a565b5b6162d882616109565b9050602081019050919050565b60006162f86162f3846162b4565b61617a565b90508281526020810184848401111561631457616313616104565b5b61631f8482856161c6565b509392505050565b600082601f83011261633c5761633b6160ff565b5b813561634c8482602086016162e5565b91505092915050565b600080600080600060a0868803121561637157616370615f3c565b5b600086013567ffffffffffffffff81111561638f5761638e615f41565b5b61639b88828901616327565b95505060206163ac88828901615f8f565b94505060406163bd88828901615f8f565b93505060606163ce88828901615f8f565b92505060806163df88828901615f8f565b9150509295509295909350565b60006020828403121561640257616401615f3c565b5b600061641084828501615fc5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616453578082015181840152602081019050616438565b83811115616462576000848401525b50505050565b600061647382616419565b61647d8185616424565b935061648d818560208601616435565b61649681616109565b840191505092915050565b600060208201905081810360008301526164bb8184616468565b905092915050565b6000602082840312156164d9576164d8615f3c565b5b60006164e784828501615f8f565b91505092915050565b600067ffffffffffffffff82111561650b5761650a61611a565b5b602082029050602081019050919050565b600080fd5b600061653461652f846164f0565b61617a565b905080838252602082019050602084028301858111156165575761655661651c565b5b835b81811015616580578061656c8882615fc5565b845260208401935050602081019050616559565b5050509392505050565b600082601f83011261659f5761659e6160ff565b5b81356165af848260208601616521565b91505092915050565b600080600080600060a086880312156165d4576165d3615f3c565b5b60006165e288828901615f8f565b95505060206165f388828901615f8f565b945050604086013567ffffffffffffffff81111561661457616613615f41565b5b6166208882890161658a565b935050606086013567ffffffffffffffff81111561664157616640615f41565b5b61664d8882890161658a565b925050608086013567ffffffffffffffff81111561666e5761666d615f41565b5b61667a88828901616217565b9150509295509295909350565b61669081615f66565b82525050565b60006020820190506166ab6000830184616687565b92915050565b600067ffffffffffffffff8211156166cc576166cb61611a565b5b602082029050602081019050919050565b60006166f06166eb846166b1565b61617a565b905080838252602082019050602084028301858111156167135761671261651c565b5b835b8181101561673c57806167288882615f8f565b845260208401935050602081019050616715565b5050509392505050565b600082601f83011261675b5761675a6160ff565b5b813561676b8482602086016166dd565b91505092915050565b6000806040838503121561678b5761678a615f3c565b5b600083013567ffffffffffffffff8111156167a9576167a8615f41565b5b6167b585828601616746565b925050602083013567ffffffffffffffff8111156167d6576167d5615f41565b5b6167e28582860161658a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61682181615fa4565b82525050565b60006168338383616818565b60208301905092915050565b6000602082019050919050565b6000616857826167ec565b61686181856167f7565b935061686c83616808565b8060005b8381101561689d5781516168848882616827565b975061688f8361683f565b925050600181019050616870565b5085935050505092915050565b600060208201905081810360008301526168c4818461684c565b905092915050565b600060e0820190506168e1600083018a61601a565b6168ee602083018961601a565b6168fb604083018861601a565b616908606083018761601a565b616915608083018661601a565b61692260a0830185616687565b61692f60c083018461601a565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61697081615f66565b82525050565b60006169828383616967565b60208301905092915050565b6000602082019050919050565b60006169a68261693b565b6169b08185616946565b93506169bb83616957565b8060005b838110156169ec5781516169d38882616976565b97506169de8361698e565b9250506001810190506169bf565b5085935050505092915050565b60006020820190508181036000830152616a13818461699b565b905092915050565b600080fd5b60008083601f840112616a3657616a356160ff565b5b8235905067ffffffffffffffff811115616a5357616a52616a1b565b5b602083019150836020820283011115616a6f57616a6e61651c565b5b9250929050565b600080600060408486031215616a8f57616a8e615f3c565b5b600084013567ffffffffffffffff811115616aad57616aac615f41565b5b616ab986828701616a20565b9350935050602084013567ffffffffffffffff811115616adc57616adb615f41565b5b616ae886828701616217565b9150509250925092565b60008060408385031215616b0957616b08615f3c565b5b6000616b1785828601615fc5565b9250506020616b2885828601615f8f565b9150509250929050565b616b3b816160c9565b8114616b4657600080fd5b50565b600081359050616b5881616b32565b92915050565b60008060408385031215616b7557616b74615f3c565b5b6000616b8385828601615f8f565b9250506020616b9485828601616b49565b9150509250929050565b600080600080600080600060e0888a031215616bbd57616bbc615f3c565b5b600088013567ffffffffffffffff811115616bdb57616bda615f41565b5b616be78a828b01616327565b9750506020616bf88a828b01615fc5565b9650506040616c098a828b01615fc5565b9550506060616c1a8a828b01615fc5565b9450506080616c2b8a828b01615fc5565b93505060a0616c3c8a828b01615fc5565b92505060c088013567ffffffffffffffff811115616c5d57616c5c615f41565b5b616c698a828b01616217565b91505092959891949750929550565b60008060408385031215616c8f57616c8e615f3c565b5b6000616c9d85828601615f8f565b9250506020616cae85828601615f8f565b9150509250929050565b600080600080600060a08688031215616cd457616cd3615f3c565b5b6000616ce288828901615f8f565b9550506020616cf388828901615f8f565b9450506040616d0488828901615fc5565b9350506060616d1588828901615fc5565b925050608086013567ffffffffffffffff811115616d3657616d35615f41565b5b616d4288828901616217565b9150509295509295909350565b6000819050919050565b616d6a616d6582615fa4565b616d4f565b82525050565b60008160601b9050919050565b6000616d8882616d70565b9050919050565b6000616d9a82616d7d565b9050919050565b616db2616dad82615f66565b616d8f565b82525050565b6000616dc48287616d59565b602082019150616dd48286616d59565b602082019150616de48285616da1565b601482019150616df48284616d59565b60208201915081905095945050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000616e3c600283616424565b9150616e4782616e06565b602082019050919050565b60006020820190508181036000830152616e6b81616e2f565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000616ea8600283616424565b9150616eb382616e72565b602082019050919050565b60006020820190508181036000830152616ed781616e9b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680616f2557607f821691505b602082108103616f3857616f37616ede565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000616f74601d83616424565b9150616f7f82616f3e565b602082019050919050565b60006020820190508181036000830152616fa381616f67565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154616fd781616f0d565b616fe18186616faa565b94506001821660008114616ffc576001811461700d57617040565b60ff19831686528186019350617040565b61701685616fb5565b60005b8381101561703857815481890152600182019150602081019050617019565b838801955050505b50505092915050565b600061705482616419565b61705e8185616faa565b935061706e818560208601616435565b80840191505092915050565b60006170868285616fca565b91506170928284617049565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006170fa602983616424565b91506171058261709e565b604082019050919050565b60006020820190508181036000830152617129816170ed565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061718c602983616424565b915061719782617130565b604082019050919050565b600060208201905081810360008301526171bb8161717f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061724d603183616424565b9150617258826171f1565b604082019050919050565b6000602082019050818103600083015261727c81617240565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b60006172b9600383616424565b91506172c482617283565b602082019050919050565b600060208201905081810360008301526172e8816172ac565b9050919050565b7f4e43000000000000000000000000000000000000000000000000000000000000600082015250565b6000617325600283616424565b9150617330826172ef565b602082019050919050565b6000602082019050818103600083015261735481617318565b9050919050565b600081905092915050565b600080fd5b6000617377838561735b565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156173aa576173a9617366565b5b6020830292506173bb8385846161c6565b82840190509392505050565b60006173d482858761736b565b91506173e08284616da1565b601482019150819050949350505050565b60006173fd8284616da1565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061747582615fa4565b915061748083615fa4565b9250826174905761748f61740c565b5b828204905092915050565b60006174a682615f46565b9050919050565b60006174b882616d7d565b9050919050565b6174d06174cb8261749b565b6174ad565b82525050565b60006174e282846174bf565b60148201915081905092915050565b60006174fc82615fa4565b915061750783615fa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561753c5761753b61743b565b5b828201905092915050565b60006175538284616d59565b60208201915081905092915050565b600061756d82615fa4565b915061757883615fa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156175b1576175b061743b565b5b828202905092915050565b60006175c782615fa4565b91506175d283615fa4565b9250828210156175e5576175e461743b565b5b828203905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061764c602983616424565b9150617657826175f0565b604082019050919050565b6000602082019050818103600083015261767b8161763f565b9050919050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006176b8600283616424565b91506176c382617682565b602082019050919050565b600060208201905081810360008301526176e7816176ab565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617724600383616424565b915061772f826176ee565b602082019050919050565b6000602082019050818103600083015261775381617717565b9050919050565b7f4941430000000000000000000000000000000000000000000000000000000000600082015250565b6000617790600383616424565b915061779b8261775a565b602082019050919050565b600060208201905081810360008301526177bf81617783565b9050919050565b60006177d2828b617049565b91506177de828a616d59565b6020820191506177ee8289616d59565b6020820191506177fe8288616d59565b60208201915061780e8287616d59565b60208201915061781e8286616d59565b60208201915061782e8285616da1565b60148201915061783e8284616d59565b6020820191508190509998505050505050505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006178b0602b83616424565b91506178bb82617854565b604082019050919050565b600060208201905081810360008301526178df816178a3565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061791c601c83616faa565b9150617927826178e6565b601c82019050919050565b6000819050919050565b6000819050919050565b61795761795282617932565b61793c565b82525050565b60006179688261790f565b91506179748284617946565b60208201915081905092915050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179b9600283616424565b91506179c482617983565b602082019050919050565b600060208201905081810360008301526179e8816179ac565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a25600383616424565b9150617a30826179ef565b602082019050919050565b60006020820190508181036000830152617a5481617a18565b9050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617a91600283616424565b9150617a9c82617a5b565b602082019050919050565b60006020820190508181036000830152617ac081617a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617b2c601883616424565b9150617b3782617af6565b602082019050919050565b60006020820190508181036000830152617b5b81617b1f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617b98601f83616424565b9150617ba382617b62565b602082019050919050565b60006020820190508181036000830152617bc781617b8b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617c2a602283616424565b9150617c3582617bce565b604082019050919050565b60006020820190508181036000830152617c5981617c1d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617cbc602283616424565b9150617cc782617c60565b604082019050919050565b60006020820190508181036000830152617ceb81617caf565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000617d4e602583616424565b9150617d5982617cf2565b604082019050919050565b60006020820190508181036000830152617d7d81617d41565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000617de0602883616424565b9150617deb82617d84565b604082019050919050565b60006020820190508181036000830152617e0f81617dd3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000617e72602b83616424565b9150617e7d82617e16565b604082019050919050565b60006020820190508181036000830152617ea181617e65565b9050919050565b60006040820190508181036000830152617ec2818561684c565b90508181036020830152617ed6818461684c565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000617f0682617edf565b617f108185617eea565b9350617f20818560208601616435565b617f2981616109565b840191505092915050565b600060a082019050617f496000830188616687565b617f566020830187616687565b8181036040830152617f68818661684c565b90508181036060830152617f7c818561684c565b90508181036080830152617f908184617efb565b90509695505050505050565b600081519050617fab81616070565b92915050565b600060208284031215617fc757617fc6615f3c565b5b6000617fd584828501617f9c565b91505092915050565b60008160e01c9050919050565b600060033d111561800a5760046000803e618007600051617fde565b90505b90565b600060443d1061809a5761801f615f32565b60043d036004823e80513d602482011167ffffffffffffffff8211171561804757505061809a565b808201805167ffffffffffffffff811115618065575050505061809a565b80602083010160043d03850181111561808257505050505061809a565b61809182602001850186616149565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006180f9603483616424565b91506181048261809d565b604082019050919050565b60006020820190508181036000830152618128816180ec565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061818b602883616424565b91506181968261812f565b604082019050919050565b600060208201905081810360008301526181ba8161817e565b9050919050565b60006040820190506181d6600083018561601a565b6181e3602083018461601a565b9392505050565b600060a0820190506181ff6000830188616687565b61820c6020830187616687565b618219604083018661601a565b618226606083018561601a565b81810360808301526182388184617efb565b90509695505050505050565b61824d81617932565b82525050565b600060ff82169050919050565b61826981618253565b82525050565b60006080820190506182846000830187618244565b6182916020830186618260565b61829e6040830185618244565b6182ab6060830184618244565b95945050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618310602183616424565b915061831b826182b4565b604082019050919050565b6000602082019050818103600083015261833f81618303565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006183a2602283616424565b91506183ad82618346565b604082019050919050565b600060208201905081810360008301526183d181618395565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220eabae1bf18723c3d1fe9fa7cb9eb6a57864f0af068c04e8d742236553e3e9a3f64736f6c634300080d0033"; type CyberDestinationFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts index 5d4a12f..2d53416 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts @@ -478,6 +478,30 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "mintRandom", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, { inputs: [ { @@ -510,6 +534,30 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "_max", + type: "uint256", + }, + { + internalType: "address", + name: "_sender", + type: "address", + }, + ], + name: "random", + outputs: [ + { + internalType: "uint256", + name: "number", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -705,7 +753,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613deb806100206000396000f3fe6080604052600436106101745760003560e01c8063572b6c05116100cb578063b3a721d11161007f578063e751c98111610059578063e751c98114610527578063e985e9c514610547578063f242432a146105bc57600080fd5b8063b3a721d11461049d578063bc01188e146104bd578063bd85b0391461050757600080fd5b80636dcfd841116100b05780636dcfd8411461043057806385bff2e71461045d578063a22cb4651461047d57600080fd5b8063572b6c051461036a5780636787d449146103c557600080fd5b806313ba55df1161012d5780632eb2c2d6116101075780632eb2c2d6146102b2578063481c6a75146102d25780634e1273f41461033d57600080fd5b806313ba55df1461023e57806318160ddd1461025e5780631b0239471461029257600080fd5b806308dc9f421161015e57806308dc9f42146101dc5780630b885ac3146101ef5780630e89341c1461021157600080fd5b8062fdd58e1461017957806301ffc9a7146101ac575b600080fd5b34801561018557600080fd5b50610199610194366004613187565b6105dc565b6040519081526020015b60405180910390f35b3480156101b857600080fd5b506101cc6101c73660046131df565b6105f1565b60405190151581526020016101a3565b6101cc6101ea36600461330f565b61064a565b3480156101fb57600080fd5b5061020f61020a36600461335f565b610ab4565b005b34801561021d57600080fd5b5061023161022c3660046133df565b610cf8565b6040516101a3919061346e565b34801561024a57600080fd5b506101996102593660046133df565b610e50565b34801561026a57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6054610199565b34801561029e57600080fd5b506101996102ad366004613481565b610e5b565b3480156102be57600080fd5b5061020f6102cd366004613531565b610ea5565b3480156102de57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a3565b34801561034957600080fd5b5061035d6103583660046135db565b610f9f565b6040516101a391906136e1565b34801561037657600080fd5b506101cc610385366004613481565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff90811691161490565b3480156103d157600080fd5b506103e56103e03660046133df565b6111fa565b604080519788526020880196909652948601939093526060850191909152608084015273ffffffffffffffffffffffffffffffffffffffff1660a083015260c082015260e0016101a3565b34801561043c57600080fd5b5061045061044b3660046133df565b6112d4565b6040516101a391906136f4565b34801561046957600080fd5b5061035d610478366004613481565b6112df565b34801561048957600080fd5b5061020f61049836600461374e565b6112ea565b3480156104a957600080fd5b506101996104b836600461378a565b61142b565b3480156104c957600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a625473ffffffffffffffffffffffffffffffffffffffff16610318565b34801561051357600080fd5b506101996105223660046133df565b6114db565b34801561053357600080fd5b506101996105423660046137b6565b61150e565b34801561055357600080fd5b506101cc61056236600461384a565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832093909416825291909152205460ff1690565b3480156105c857600080fd5b5061020f6105d7366004613874565b611892565b60006105e88383611985565b90505b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604081205460ff166105eb565b600080610655611a64565b60008681527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260409020600681015460038201549293509091869161069c91613908565b10156106ef5760405162461bcd60e51b815260206004820152600260248201527f435200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b805442118015610703575080600101544211155b61074f5760405162461bcd60e51b815260206004820152600360248201527f4f4f54000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b84816002015461075f919061391f565b34146107ad5760405162461bcd60e51b815260206004820152600260248201527f494100000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260078201602090815260408083205481519283018a9052908201889052606085811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690830152607482018190529190609401604051602081830303815290604052905060006108577f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90565b905060006108c3886108bd85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611ae5565b825490915073ffffffffffffffffffffffffffffffffffffffff80831691161461092f5760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b88856006016000828254610943919061395c565b909155505073ffffffffffffffffffffffffffffffffffffffff86166000908152600786016020526040902080546001019055610991868b8b60405180602001604052806000815250611b09565b600285015415610a5f57600060648660040154346109af919061391f565b6109b99190613974565b905060006109c78234613908565b600588015460405191925073ffffffffffffffffffffffffffffffffffffffff169082156108fc029083906000818181858888f19350505050158015610a11573d6000803e3d6000fd5b50600484015460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f19350505050158015610a5b573d6000803e3d6000fd5b5050505b888a8773ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a45060019998505050505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610b3a5760405162461bcd60e51b815260206004820152600260248201527f4e4f00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fd9b67a26000000000000000000000000000000000000000000000000000000006000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f845f7f8d885943dffdc1524acbd9538b2923f93aad26d306df3b8982c7f0632d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c3485611b2a565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5f8054938616938216939093179092557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a628054919094169116179091555050565b60008181527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c836020526040812080546060929190610d35906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906139af565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505090508051600003610e065760405162461bcd60e51b815260206004820152601d60248201527f455243313135355552493a20746f6b656e4964206e6f7420657869737400000060448201526064016106e6565b604051610e39907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c84908390602001613a1e565b604051602081830303815290604052915050919050565b60006105eb82611b60565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6160205260408120546105eb565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f18575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b610f8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611b96565b5050505050565b606081518351146110185760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106e6565b82517f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b9060009067ffffffffffffffff81111561105757611057613203565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b50905060005b85518110156111f157600073ffffffffffffffffffffffffffffffffffffffff168682815181106110b9576110b9613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361114a5760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106e6565b82600086838151811061115f5761115f613afb565b60200260200101518152602001908152602001600020600087838151811061118957611189613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106111de576111de613afb565b6020908102919091010152600101611086565b50949350505050565b60008181527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482918291829182918291829182036112865760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b805460018201546002830154600384015460048501546005860154600690960154949e939d50919b509950975073ffffffffffffffffffffffffffffffffffffffff90921695509350915050565b60606105eb82611bba565b60606105eb82611c93565b73ffffffffffffffffffffffffffffffffffffffff821633036113755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106e6565b3360008181527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008281527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482036114ab5760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600782016020526040902054949350505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea60205260408120546105eb565b60008061151b8888613908565b116115685760405162461bcd60e51b815260206004820152600260248201527f495400000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60648311156115b95760405162461bcd60e51b815260206004820152600360248201527f49534f000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b600084116116095760405162461bcd60e51b815260206004820152600360248201527f494143000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e6000611634611a64565b9050600061164182610e5b565b905060008b8b8b8b8b8b8888604051602001611664989796959493929190613b2a565b604051602081830303815290604052905060006116d9876108bd84805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b855490915073ffffffffffffffffffffffffffffffffffffffff8083169116146117455760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60028501549550611756868e611d69565b6117668560020180546001019055565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260038601602052604090208054600101905560007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe659600101600088815260200190815260200160002090508c81600001819055508b81600101819055508a8160020181905550898160030181905550888160040181905550848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480611905575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b6119775760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611dac565b600073ffffffffffffffffffffffffffffffffffffffff8316611a105760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016106e6565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff95909516845293905250205490565b600060183610801590611aad57507fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff1633145b15611add57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b503390565b90565b6000806000611af48585611dc8565b91509150611b0181611e36565b509392505050565b611b1584848484612025565b611b243360008686868661218c565b50505050565b8051611b5c907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c849060208401906130c5565b5050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206105eb906123d1565b611ba48686868686866123db565b611bb28686868686866126e3565b505050505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb60205260408120606091611bf3826123d1565b67ffffffffffffffff811115611c0b57611c0b613203565b604051908082528060200260200182016040528015611c34578160200160208202803683370190505b50905060005b611c43836123d1565b811015611b0157611c548382612876565b828281518110611c6657611c66613afb565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611c3a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec60205260408120606091611ce3826123d1565b67ffffffffffffffff811115611cfb57611cfb613203565b604051908082528060200260200182016040528015611d24578160200160208202803683370190505b50905060005b611d33836123d1565b811015611b0157611d448382612876565b828281518110611d5657611d56613afb565b6020908102919091010152600101611d2a565b60008281527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c83602090815260409091208251611da7928401906130c5565b505050565b611dba868686868686612882565b611bb286868686868661218c565b6000808251604103611dfe5760208301516040840151606085015160001a611df287828585612a88565b94509450505050611e2f565b8251604003611e275760208301516040840151611e1c868383612ba0565b935093505050611e2f565b506000905060025b9250929050565b6000816004811115611e4a57611e4a613b97565b03611e525750565b6001816004811115611e6657611e66613b97565b03611eb35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106e6565b6002816004811115611ec757611ec7613b97565b03611f145760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106e6565b6003816004811115611f2857611f28613b97565b03611f9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6004816004811115611faf57611faf613b97565b036120225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b50565b73ffffffffffffffffffffffffffffffffffffffff84166120ae5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6120cd336000866120be87612bf2565b6120c787612bf2565b86612c3d565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120805484929061212b90849061395c565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906122039089908990889088908890600401613bc6565b6020604051808303816000875af192505050801561225c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261225991810190613c16565b60015b61231157612268613c33565b806308c379a0036122a1575061227c613c4e565b8061228757506122a3565b8060405162461bcd60e51b81526004016106e6919061346e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106e6565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b50505050505050565b60006105eb825490565b73ffffffffffffffffffffffffffffffffffffffff84166124645760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b81518351146124db5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106e6565b6124e9868686868686612c3d565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60005b845181101561265b57600085828151811061252a5761252a613afb565b60200260200101519050600085838151811061254857612548613afb565b6020908102919091018101516000848152868352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156125fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008381526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320938590039093558a16815290812080546001959095019483929061264e90849061395c565b9091555061250d92505050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126d2929190613cf6565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061275a9089908990889088908890600401613d1b565b6020604051808303816000875af19250505080156127b3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526127b091810190613c16565b60015b6127bf57612268613c33565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b60006105e88383612c4b565b73ffffffffffffffffffffffffffffffffffffffff841661290b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b61291a8686866120be87612bf2565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020818152604080842073ffffffffffffffffffffffffffffffffffffffff8a16855290915290912054838110156129e05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008581526020838152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093879003909355871681529081208054859290612a2c90849061395c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8088169289821692918b16917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016126d2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612abf5750600090506003612b97565b8460ff16601b14158015612ad757508460ff16601c14155b15612ae85750600090506004612b97565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9057600060019250925050612b97565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831681612bd660ff86901c601b61395c565b9050612be487828885612a88565b935093505050935093915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c2c57612c2c613afb565b602090810291909101015292915050565b611bb2868686868686612cec565b81546000908210612cc45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b826000018281548110612cd957612cd9613afb565b9060005260206000200154905092915050565b611bb28686868686868373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611bb25773ffffffffffffffffffffffffffffffffffffffff85811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040808220928716825281207fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea927fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb929091905b8751811015612f22576000878281518110612dda57612dda613afb565b602002602001015190506000811115612f19576000898381518110612e0157612e01613afb565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603612e685760008181526020889052604081208054849290612e5d90849061395c565b90915550612e9d9050565b81612e738d83611985565b03612e9d576000818152602087905260409020612e90908d612f2f565b50612e9b8582612f51565b505b73ffffffffffffffffffffffffffffffffffffffff8b16612ee15760008181526020889052604081208054849290612ed6908490613908565b90915550612f179050565b612eeb8b82611985565b600003612f17576000818152602087905260409020612f0a908c612f5d565b50612f158482612f7f565b505b505b50600101612dbd565b5050505050505050505050565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416612f8b565b60006105e88383612f8b565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416613076565b60006105e88383613076565b6000818152600183016020526040812054801561306c57835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612fdb57612fdb613afb565b906000526020600020015490508085600001600184038154811061300157613001613afb565b600091825260208083209091019290925591825260018601905260409020819055835484908061303357613033613d86565b600190038181906000526020600020016000905590558360010160008481526020019081526020016000206000905560019150506105eb565b60009150506105eb565b60008181526001830160205260408120546130bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105eb565b5060006105eb565b8280546130d1906139af565b90600052602060002090601f0160209004810192826130f35760008555613139565b82601f1061310c57805160ff1916838001178555613139565b82800160010185558215613139579182015b8281111561313957825182559160200191906001019061311e565b50613145929150613149565b5090565b5b80821115613145576000815560010161314a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461318257600080fd5b919050565b6000806040838503121561319a57600080fd5b6131a38361315e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461202257600080fd5b6000602082840312156131f157600080fd5b81356131fc816131b1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561327657613276613203565b6040525050565b600082601f83011261328e57600080fd5b813567ffffffffffffffff8111156132a8576132a8613203565b6040516132dd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182613232565b8181528460208386010111156132f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561332457600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561334957600080fd5b6133558682870161327d565b9150509250925092565b600080600080600060a0868803121561337757600080fd5b853567ffffffffffffffff81111561338e57600080fd5b61339a8882890161327d565b9550506133a96020870161315e565b93506133b76040870161315e565b92506133c56060870161315e565b91506133d36080870161315e565b90509295509295909350565b6000602082840312156133f157600080fd5b5035919050565b60005b838110156134135781810151838201526020016133fb565b83811115611b245750506000910152565b6000815180845261343c8160208601602086016133f8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e86020830184613424565b60006020828403121561349357600080fd5b6105e88261315e565b600067ffffffffffffffff8211156134b6576134b6613203565b5060051b60200190565b600082601f8301126134d157600080fd5b813560206134de8261349c565b6040516134eb8282613232565b83815260059390931b850182019282810191508684111561350b57600080fd5b8286015b84811015613526578035835291830191830161350f565b509695505050505050565b600080600080600060a0868803121561354957600080fd5b6135528661315e565b94506135606020870161315e565b9350604086013567ffffffffffffffff8082111561357d57600080fd5b61358989838a016134c0565b9450606088013591508082111561359f57600080fd5b6135ab89838a016134c0565b935060808801359150808211156135c157600080fd5b506135ce8882890161327d565b9150509295509295909350565b600080604083850312156135ee57600080fd5b823567ffffffffffffffff8082111561360657600080fd5b818501915085601f83011261361a57600080fd5b813560206136278261349c565b6040516136348282613232565b83815260059390931b850182019282810191508984111561365457600080fd5b948201945b838610156136795761366a8661315e565b82529482019490820190613659565b9650508601359250508082111561368f57600080fd5b5061369c858286016134c0565b9150509250929050565b600081518084526020808501945080840160005b838110156136d6578151875295820195908201906001016136ba565b509495945050505050565b6020815260006105e860208301846136a6565b6020808252825182820181905260009190848201906040850190845b8181101561374257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613710565b50909695505050505050565b6000806040838503121561376157600080fd5b61376a8361315e565b91506020830135801515811461377f57600080fd5b809150509250929050565b6000806040838503121561379d57600080fd5b823591506137ad6020840161315e565b90509250929050565b600080600080600080600060e0888a0312156137d157600080fd5b873567ffffffffffffffff808211156137e957600080fd5b6137f58b838c0161327d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a013591508082111561382e57600080fd5b5061383b8a828b0161327d565b91505092959891949750929550565b6000806040838503121561385d57600080fd5b6138668361315e565b91506137ad6020840161315e565b600080600080600060a0868803121561388c57600080fd5b6138958661315e565b94506138a36020870161315e565b93506040860135925060608601359150608086013567ffffffffffffffff8111156138cd57600080fd5b6135ce8882890161327d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561391a5761391a6138d9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613957576139576138d9565b500290565b6000821982111561396f5761396f6138d9565b500190565b6000826139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c908216806139c357607f821691505b6020821081036139fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008151613a148185602086016133f8565b9290920192915050565b600080845481600182811c915080831680613a3a57607f831692505b60208084108203613a72577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015613a865760018114613ab557613ae2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650613ae2565b60008b81526020902060005b86811015613ada5781548b820152908501908301613ac1565b505084890196505b505050505050613af28185613a02565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008951613b3c818460208e016133f8565b91909101978852506020870195909552604086019390935260608086019290925260808501521b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a083015260b482015260d401919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152613c0b60a0830184613424565b979650505050505050565b600060208284031215613c2857600080fd5b81516131fc816131b1565b600060033d1115611ae25760046000803e5060005160e01c90565b600060443d1015613c5c5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613caa57505050505090565b8285019150815181811115613cc25750505050505090565b843d8701016020828501011115613cdc5750505050505090565b613ceb60208286010187613232565b509095945050505050565b604081526000613d0960408301856136a6565b8281036020840152613af281856136a6565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152613d5460a08301866136a6565b8281036060840152613d6681866136a6565b90508281036080840152613d7a8185613424565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220deabec19a77a6c37bd3549e82d2ba55b11b7386c61e767c894a987b6c876b80464736f6c634300080d0033"; + "0x60806040523480156200001157600080fd5b5061843d80620000226000396000f3fe60806040526004361061018a5760003560e01c80636787d449116100d6578063b3a721d11161007f578063e751c98111610059578063e751c9811461060a578063e985e9c514610647578063f242432a146106845761018a565b8063b3a721d114610565578063bc01188e146105a2578063bd85b039146105cd5761018a565b806385bff2e7116100b057806385bff2e7146104c25780638b349f3e146104ff578063a22cb4651461053c5761018a565b80636787d449146104125780636dcfd841146104555780637cafe690146104925761018a565b806318160ddd11610138578063481c6a7511610112578063481c6a751461036d5780634e1273f414610398578063572b6c05146103d55761018a565b806318160ddd146102dc5780631b023947146103075780632eb2c2d6146103445761018a565b80630b885ac3116101695780630b885ac3146102395780630e89341c1461026257806313ba55df1461029f5761018a565b8062fdd58e1461018f57806301ffc9a7146101cc57806308dc9f4214610209575b600080fd5b34801561019b57600080fd5b506101b660048036038101906101b19190615fda565b6106ad565b6040516101c39190616029565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee919061609c565b6106c1565b60405161020091906160e4565b60405180910390f35b610223600480360381019061021e9190616245565b6106e4565b60405161023091906160e4565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190616355565b610aef565b005b34801561026e57600080fd5b50610289600480360381019061028491906163ec565b61103f565b60405161029691906164a1565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906163ec565b6112ee565b6040516102d39190616029565b60405180910390f35b3480156102e857600080fd5b506102f1611300565b6040516102fe9190616029565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906164c3565b61139e565b60405161033b9190616029565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906165b8565b61147b565b005b34801561037957600080fd5b5061038261150f565b60405161038f9190616696565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190616774565b6115c6565b6040516103cc91906168aa565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906164c3565b6117ba565b60405161040991906160e4565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906163ec565b6118a1565b60405161044c97969594939291906168cc565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906163ec565b611afc565b60405161048991906169f9565b60405180910390f35b6104ac60048036038101906104a79190616a76565b611b0e565b6040516104b991906160e4565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906164c3565b612050565b6040516104f691906168aa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190616af2565b612062565b6040516105339190616029565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190616b5e565b612238565b005b34801561057157600080fd5b5061058c60048036038101906105879190616af2565b6123ac565b6040516105999190616029565b60405180910390f35b3480156105ae57600080fd5b506105b76125f3565b6040516105c49190616696565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906163ec565b6126aa565b6040516106019190616029565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190616b9e565b6126bc565b60405161063e9190616029565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190616c78565b6132b8565b60405161067b91906160e4565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190616cb8565b613355565b005b60006106b983836133e9565b905092915050565b60006106dd826106cf6134bb565b6134e890919063ffffffff16565b9050919050565b60006107127f69504125a65169bd9ace52315659eeee937ddd4bdf618acb15b713c78401f4c660001b613553565b61073e7faccfc096572c7e3ed3d231dedc6edbc08a8ee7083c56c5fd017fabaf408f082460001b613553565b61076a7f0412321e6c9f536996f3f40453a005c4a3083c4f9eec273735177ceb17b6140560001b613553565b6000610774613556565b90506107a27ff8a6a702a83871e3f896c8eefc0893b7963981937e76884b4f11c7fb499f3b4760001b613553565b6107ce7f02b993527cae523365a22f9447d194978d7ac0f3027271eb30eba924a9a8b00460001b613553565b60006108346107db6136f2565b600101600088815260200190815260200160002060070160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b90506108627f46cd84591a45d31f4753b1f27eada9b11731243cfee8d0e487bb9af6ca20184160001b613553565b61088e7f9d81882fab1e488e996969ec23d09cb97622605bb4d508942af0117cabd1b20b60001b613553565b6000868684846040516020016108a79493929190616db8565b60405160208183030381529060405290506108e47f14a417097b723638a61d8ae753622c1a23209652bf53c528647ca4fbbbd8d17e60001b613553565b6109107f036e543f4b650565194810827e1fc02784e8df335cdac436aee78be36726a56a60001b613553565b60006109348661092684805190602001206137de565b61380e90919063ffffffff16565b90506109627f5b07bba82364645d0d258d29b0de5613380bf36abc1216f1412b2bc393ade5c660001b613553565b61098e7fe169306b6ec3dbbdc82a15559d389711c2171fbc553cc50e407c2e22ced0863260001b613553565b6109ba7fa2f66755fcdc1651ea119ea6965a4a2a02fed2ed5b54717e112662b0c39e7caa60001b613553565b6109c2613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90616e52565b60405180910390fd5b610a7f7f9b3a9722eff62304e4422ed0f66887e99a718588c3a44bbabb55d5595f05160760001b613553565b610aab7f11e03f72ffc8988cbdb454ed20e69f714fed69060ed900ee7e2c7e94ae52dcc060001b613553565b610ad77f2c4240edf1288e6ac4b00dbcf5088b9764c0fde3fbac31357ddb1ea812fd025360001b613553565b610ae2888886613913565b9450505050509392505050565b610b1b7f1e4f3db61d02d43f745245c64298d7f0c1a3e8708559b6670d4ca42c54514f4460001b614280565b610b477f0ac4986fe6d4c3895c8ef5e03bf2b121d82e6cf32614c4c5189671928b98f8e360001b614280565b610b737f145960e0b8e54656e42c3b088b3a10b57bf051eb1c4bb726aa3f9ccfaa056f1c60001b614280565b610b9f7f901a5d83ad9e5900a26fb984a5a99dc96974734dd64371311e5ca412033f4aa560001b614280565b3373ffffffffffffffffffffffffffffffffffffffff16610bbe614283565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90616ebe565b60405180910390fd5b610c647fb7cd82f2e96c1e329917e6a6f329bab37f4868e3a34f88a3ae05f88fe1899b6e60001b614280565b610c907fb5ae9824ef1c4b9d1c19baecf68dbac5d61b7d6069bf88af80ad92642241b4d260001b614280565b610cbc7ff115cefef55a500dd4e6296e9a3d6cc0e8dc3d6712feb6c7f9f051ca69614aa860001b614280565b82610cc5614361565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d327fd72402da254f9ba5a463e2015cebe357527e12a62cd25ecae2e2921778ddc3cb60001b614280565b610d5e7f543c25cfe85aa6f8c53e60eaa7f95103d121790ecad586cf733b8a8818b76f7960001b614280565b6001610d68614283565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610e1d7f18d24b611c0380c8df6354eea02a5a82d3b36fea45384921c977b440fbbeae9f60001b614280565b610e497fe0a44e89e5938bc342f25b353520510937291eb9dcca1342977aa3ec3eda8fc060001b614280565b610e528561443f565b610e7e7fc7c1929af15c5b3153f6eeb8ca93a8874a8cc881a6d885786447b173c210d63460001b614280565b610eaa7f720f9f9246e75a85b11fea637347797614847368b50cbf3d6962eb4bff9a58bf60001b614280565b83610eb3613835565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f207f42fa96a8febb97c55f95796d3fb0d21c410d5ab5adf4ace2d87a196cc4dc3f9760001b614280565b610f4c7fd44b3d45ab725ff9a331429e51865d518e4343c4f6bcdfeeca70765aa2ee70eb60001b614280565b81610f55613835565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc27f1eb6094a4ff364bc1205590533550d7e1d18bb4fc33971eb49a6c38f5c349b1d60001b614280565b610fee7fd671a9abc380ff64132a5a282180f649887bc6379ff36cf2c62463e383d3749b60001b614280565b80610ff7613835565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606061106d7f1c3b8ce455b2ad4634a6bde830f371ccaa9a60a47f7530d5559c60059ac6796360001b6144e6565b6110997f744faa1a7f641981fd5340120b41026f6255d60e762e83a56d1f5e25ace615c060001b6144e6565b6110c57f7ddf9d337eeac748c812ff0c191bca0bd9ad27c607ff6276c26efb1d10350ff960001b6144e6565b60006110cf6144e9565b600001600084815260200190815260200160002080546110ee90616f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90616f0d565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905061119a7f31479a340477a3cd3ddd8874968c9b56fbb69a24bd62655bb14254f5e8b6b66f60001b6144e6565b6111c67fb07081f26262d7615671a199ff1ec98be27284b5bbb83db432041ec57553afce60001b6144e6565b6111f27f6f3823429822313601553d8d17013e3cb264da9b810dc4d78587e834dde5ca1060001b6144e6565b6000815103611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90616f8a565b60405180910390fd5b6112627f0758b40c742a6fadcdad3a342e6f0185a043afcf936f6a1f430cfe0a2895409f60001b6144e6565b61128e7fd00b5f2990c6e433c54a778edb076d4dd783ae43a208d2bd579c3e8b8fec22ff60001b6144e6565b6112ba7fac6e807513b0bd038c04f48a60fcaa1ca589bda2965c00a45f99327340337f7060001b6144e6565b6112c26144e9565b600101816040516020016112d792919061707a565b604051602081830303815290604052915050919050565b60006112f9826145c7565b9050919050565b600061132e7fa33d91318f77fb95d2fe4386c2678c14692f4adf788a72bcf2e6161f1537a0df60001b614280565b61135a7f261f9308b795e5a1107f3e9f410b1729e5552cbec6ef68eb8baeb4101526ac8160001b614280565b6113867fc3b939dd6c5215c8cbeda83887c1c350b1860f6de8924882ae7d062b377db98860001b614280565b611399611391613835565b6002016137d0565b905090565b60006113cc7fae1f162029218081da04bc8ad4cc45c451cdd486a41807dfddaa697cdb51db7760001b614280565b6113f87fec18d1e30aaf675a2d5fed1149a973e710441a8383555ea0ffb7ee515f1cd24660001b614280565b6114247f5fad527e5d3d69e8dc7332a6976fecc95c52e88dffc8d20b259e135cb58c4bf660001b614280565b61147461142f613835565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bb57506114ba85336132b8565b5b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190617110565b60405180910390fd5b6115083386868686866145f4565b5050505050565b600061153d7f340aa1274e9ed6d73309ff2182f3df83aa741ede424aa35a2849a2c2144894d360001b614280565b6115697f21d1933df3a4a8fa207ebb584b97eb52ab398c4a1cfec85eb03e5f5f6d1ccf5e60001b614280565b6115957fa7c174764dca473b275d9b1190c3b7f15c9dd7d692ab10c1b9267a4fc13a517b60001b614280565b61159d613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906171a2565b60405180910390fd5b6000611616614618565b60000190506000845167ffffffffffffffff8111156116385761163761611a565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b85518110156117ae57600073ffffffffffffffffffffffffffffffffffffffff168682815181106116a05761169f6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590617263565b60405180910390fd5b826000868381518110611714576117136171c2565b5b60200260200101518152602001908152602001600020600087838151811061173f5761173e6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611795576117946171c2565b5b602002602001018181525050808060010191505061166c565b50809250505092915050565b60006117e87fc51b1a04fdf35d4961d655a2e9df2e144166121cdbbd5fcebcda1d4fb6b4afd760001b614645565b6118147f160a64ca27fca7833fe2c155dbc48620377746ad27e180a793134a8b523ea11160001b614645565b6118407ff7ead2e2d6d8c6b4cb4e64bda1cd535361e99fb0ae87d56950d3fc237d1c83e760001b614645565b611848614361565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008060008060006118d87f465fa96a026591afcc73eedf68b5c234111d787bdef224abefbea5f24a6304f660001b613553565b6119047f1a2d192b6ae8580c21449edc18a5c5189abd26b541b43023a7c74f72a23c7be160001b613553565b6119307fcd678e9c959426ff304e44b1af5415d33309a2109427d6ac8491e166b7cb976860001b613553565b600061193a6136f2565b60010160008a8152602001908152602001600020905061197c7fa4b18d81fa899abf513b4e95a051fcd93b2e51d2ed12e1653a1014ce1c00c26460001b613553565b6119a87f83f8325adf643554750cc9e87bae0a5049ec04d2429bacf59c3f9b1108b6884b60001b613553565b6119d47fa4cf44de82e0fd6de50eb99a5e6c9948927be4018461e0737f597b075268826960001b613553565b6000816003015403611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a12906172cf565b60405180910390fd5b611a477f90f8613cbb087340bcca2584e180c5bb0e2901934a061edf860c6dd48c6e76fc60001b613553565b611a737f6ababc2cd4db007b37cf61708a8c9bf1d76d283de7b4eee8b3ed1ced58be40cf60001b613553565b611a9f7f204e74a6d17e8e13984367216650a7a0fe40d524672370a1fa43770fa3b43bcc60001b613553565b806000015481600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060154975097509750975097509750975050919395979092949650565b6060611b0782614648565b9050919050565b6000611b3c7ff24834d51a1c359dacb2d97c14e2fcffc7464051ec52e708ad5863881d6f35da60001b613553565b611b687f7669ffee594535e6f33a4689f9303c5b0be52f7684b56230d794f5750bf5994960001b613553565b611b947ff79b90c16015f799c056f5ef78549f157c8d9c905ffb99eb847d6072ede6f2e460001b613553565b611bc07feb4ed2cbd35ed9850baae47a508cba57a82490d1bb12ebd37e0f3c36f128f31760001b613553565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c259061733b565b60405180910390fd5b611c5a7f7b03635d50a2ac6a2176f76edc64adf6be2cf6903326ad1b85fa61c9d7bf0af260001b613553565b611c867f4e6fc0202bd1107ef1dd2be5a6683c8d6936d2d1c9fec2a089f5d8b8dc92407f60001b613553565b611cb27f9ffb1814439e241f271bc61198718d53cd81db521ea4b918e03143e1aaa2711860001b613553565b611cde7fb8c98bda67af8c290643ba4efdae96f986c3aaec8665c4a5f692f7be2be7fbb360001b613553565b611d0a7f0928c4062428db501eb41553c8d2b14b4940048b02c8701abf121fd545d7238860001b613553565b6000611d14613556565b9050611d427f15b143cbdb1ab87d35daa7e35136263eff53fba20d7c7bb58ba41d93c564cd2e60001b613553565b611d6e7f19a3e3512e07676e18e589506dc158d80b5d7cb3beac1bd9433961c241f15ed260001b613553565b6000611d7d8686905083612062565b9050611dab7f3cdc773ec7a0bbfac9bb175b96dac685fe84427e3e8817908be364e7e19d958e60001b613553565b611dd77f898fd03dc07b76f3fb4a9ad96a6d4ae4938ee88b1b9ae0d839c6fb75851d487160001b613553565b6000868684604051602001611dee939291906173c7565b6040516020818303038152906040529050611e2b7ffa2d084e5aa3bb9d552106093bb156ed767efd13d4ef769f45a1c608608db9ad60001b613553565b611e577fb4adb993f0112309e0dda211c3c872be6fc1e8e1e24c2737bcca45864f4992fc60001b613553565b6000611e7b86611e6d84805190602001206137de565b61380e90919063ffffffff16565b9050611ea97f3385f8936d3613b10a69cd465c8105b4160dd4bb6150da1a8c527fa7bed06c7360001b613553565b611ed57fbedc4adb23e940e294388ee7224af083de5e3284529ef41d6ce9930033a07b5e60001b613553565b611f017fcaf9c7508b1d2979a5c86ba62715d43dcc60bf70be5b83327aaf3f862ff5513860001b613553565b611f09613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190616e52565b60405180910390fd5b611fc67f07a7bc365223ab36c77a4a9ea8ebe4b7b8d6231b8ae915ebad4c2f50b2f3d57260001b613553565b611ff27fe7ee1b5bed08b17973242e0848405f3c04f580944813fdbecff270770eb7d18260001b613553565b61201e7f94f361318dbc2681bc9996f924781ee86ece31f3436523b550f4d04cf3874fe660001b613553565b612043888885818110612034576120336171c2565b5b90506020020135600186613913565b9450505050509392505050565b606061205b8261474a565b9050919050565b60006120907f60765bedd401bd9b58bfa600b58a3868c5af8544f7e462831178bd883d38117860001b613553565b6120bc7f2b6a4ce8c1966ea92df90f6cbae66e288ec6448dc56286facce3dfeb13821f2960001b613553565b6120e87f1389e418c0a511e7e3eaa43e4d94e098cb9c042c036c05bc4d684f5125db491d60001b613553565b600042836040516020016120fc91906173f1565b6040516020818303038152906040528051906020012060001c61211f919061746a565b424160405160200161213191906174d6565b6040516020818303038152906040528051906020012060001c612154919061746a565b4345444261216291906174f1565b61216c91906174f1565b61217691906174f1565b61218091906174f1565b61218a91906174f1565b60405160200161219a9190617547565b6040516020818303038152906040528051906020012060001c90506121e17f5b21c6f2374698176296dfe2a8445e7fce913edb407c39cc7d5abab4c5d15b3e60001b613553565b61220d7f3d73192fe1bf95af8a0c91385764162dd6e965f6a777b8de1bd879bdf7de096060001b613553565b83848261221a919061746a565b6122249190617562565b8161222f91906175bc565b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90617662565b60405180910390fd5b806122af614618565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a091906160e4565b60405180910390a35050565b60006123da7f8de92a92eb4f534db65b0725a8a299eb59aca6138bd32c120bbb7dd57a3ab30960001b613553565b6124067fe613f2110dcf45672ce7ada28d0addc56fe733cc274f376124ed0fab09168f7960001b613553565b6124327f4b32fe64b1f0597ff9d8f100de6695d3b21da2485df357cdfa7c687dd882b1cb60001b613553565b600061243c6136f2565b6001016000858152602001908152602001600020905061247e7f333e5fe9b82539e577e6711e227ffb85f984985603e2dcd3b310181f1bcb4ea860001b613553565b6124aa7f2f8b9bc4af379bc9da65e0359701c93e42ca912183d8cfae8427a5607a2cac2b60001b613553565b6124d67f455c527fdc00c09c1476f596faf29cdbf259272fb5eb7bf373b98b5899d2f43260001b613553565b600081600301540361251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906172cf565b60405180910390fd5b6125497f3e6a4520705047fd60862a3b73db1fb921ab171e642d1ddafaccea0294370d6860001b613553565b6125757f43e347200895dc09f6b125f52292b2bbab2f2545f9cc7bc4d8c09c40219efcc760001b613553565b6125a17f9b4beade9509f38d5ffce5a7d5b78ca2a1e8ae892073a7b364f0e4841c25151a60001b613553565b6125ea8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b91505092915050565b60006126217f0619baf6ca8789a3e86f4aff6d89e719238ed3e720a6993e0accc89ca92b9d4860001b614280565b61264d7fdf5461867b8a8bd8fb4f7803cb9c246a7892adc5b2b475b1f75dba51b2182f7a60001b614280565b6126797faca8ec6ded37615fcf2cd5aa4063085146ed390b11503d1b7d2ea113fb25dd7660001b614280565b612681613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006126b58261484a565b9050919050565b60006126ea7f720938f99de2f11f86876804fff7292696d42b75131e9bac80c0a95c8e5a279060001b613553565b6127167fd806a38c7b5d62d6af24a70340f4e595ddc4623ea115bdb799dfe0d0bacb787160001b613553565b6127427f82e12f199f839c376058aa1ecc504c862f1e16b6ed3bd1b912be770073b6e20060001b613553565b61276e7f5df9890c32153a31c3071d9dc69e4ebe97acca3f7f7ef3e3f74d36b2a88bdef460001b613553565b6000878761277c91906175bc565b116127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906176ce565b60405180910390fd5b6127e87f0492531b4255db2bc8189f4589d26e800181076ba492c838b5ab11e715f2847f60001b613553565b6128147f6e5ae7c332c217ef76c88e8a3a828bedadc25fca4cd857c39daa1789d642e76460001b613553565b6128407fc14eca242eab0aa946075f409d9b8d9698598cf1acd8ae3f19d116a458ccca1f60001b613553565b61286c7f83f27d511f4a33dee6c8cbf58233412fc09cdf67ecf721d46504f311343567c460001b613553565b60648311156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a79061773a565b60405180910390fd5b6128dc7f159c847be75e9bd093bc13b4b6d370fecb5aa1579b8517b2c7e1cc9ad418293460001b613553565b6129087f25bb89bd30e8a1744b71ff33f22a31cc94de7bfaf120ff91eeeac9303ffb834b60001b613553565b6129347f1218d8f17309fb2483a89e7b7e97bfbcc02a3120794538df2dcbd723b527d66960001b613553565b6129607f32b4d025bdd90830de6a84d51a47fe77e74982bfdf3a2749f8a7a613dc06e37260001b613553565b600084116129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a906177a6565b60405180910390fd5b6129cf7f8285f477a723c9b64cfb7be4086753679ac95943cd4466441515be3486e8c53560001b613553565b6129fb7fcba34dcae13ecb803751a3823d65df04bb6dfdd36c62e9dc8019dd46a65bb7ed60001b613553565b612a277f751669b10886962e6900a9e69ce28663127762edbb446168c614741dc82ec4e060001b613553565b6000612a31613835565b9050612a5f7f8a14962ce2b3a5ce0d0137f7e30711ce4290c774a0ca46fa695933ee82d7ae1e60001b613553565b612a8b7fbbe952a07f813f8f03a63cfc960e05d3ba7b1eb47f08549e6cdff14eb60d4d1260001b613553565b6000612a95613556565b9050612ac37f54d3bc4c862888cb85715327572df775563a8a2d4adbe5599357afe9d87ca68460001b613553565b612aef7f2248fee24ebe4d855f90fdd22a450262412705d7526f17a5347c7f629cbc522760001b613553565b6000612afa8261139e565b9050612b287f4c42dfd24abad1c05a3f4f70b7946f0692bee8150918e59af57f0b3db5a6da4d60001b613553565b612b547ff913260939086e368089a839e0841d58895284bb43e1bbac925230740aa0334860001b613553565b60008b8b8b8b8b8b8888604051602001612b759897969594939291906177c6565b6040516020818303038152906040529050612bb27f4d2e27de565216e905e62ac14a701f0ebefa2898551ae6dd80ec8b39a1b073c960001b613553565b612bde7f357fc6ce39641fa002b9859340974f193937eec06e410b560ea8c55f9848b09d60001b613553565b6000612c0287612bf484805190602001206137de565b61380e90919063ffffffff16565b9050612c307f2b8bf47f9dd9ebf95a30441a56580e8c6cdd7a976113a0740a484f69a9f9a51f60001b613553565b612c5c7f7851e13dec3d128dcfdeeb450c4a98237c728693168cb2c30003cf2c555b722860001b613553565b612c887f6d62bde961a1df0136651e214e015a645c511ff369879102410ff00a635cc07a60001b613553565b8460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190616e52565b60405180910390fd5b612d467f7a6ac0a8027b1e93edac2ab8901c948f0e5517215e93b27144e72eb8dc10f06960001b613553565b612d727fe4aa691889ee30419eaeef0947141197b9fc44914eb9e0c9fec36bca603cf86960001b613553565b612d9e7f9d0520a90711ce6b354183a30cfb75a12d13ae3461231704edfcf5d387938f6160001b613553565b612daa856002016137d0565b9550612dd87ffc0c07e3520f96cfbe67b70729c3659036168bae15e56a7faeceb26da24d5dbb60001b613553565b612e047f5959b06c459141c8df2d02d9795dcb8305b253b4cbf36ff3f46c5854ad9e8d7160001b613553565b612e0e868e614870565b612e3a7f4a2a90ed8fd29ea0a282c73c2f1ab1a7b4ac5c3728df33028bb4ec6d7d653f6c60001b613553565b612e667f89952afdbe3ae446eabfd7530b5468afe7226c2f4d9f18bc9b77cbee2ea0a11f60001b613553565b612e7285600201614929565b612e9e7f10a46dfdbae3dd49d7a950ff9e6b688651f17200627cad1639593ee54228315e60001b613553565b612eca7f14c07fdaaadb84d75015844b053d5c42596ba04d5ef5314dc4b439e77d7a8d4160001b613553565b612f138560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b612f3f7ff4e567e7562911da39bffb81e288c8f975e497cd7150fccc6a2a2c68b5b9dafc60001b613553565b612f6b7ff8a191528b6fbe90d3cd26e4f22be7d31c75c8daab9998f0edb1d5b3d76bffba60001b613553565b6000612f756136f2565b60010160008881526020019081526020016000209050612fb77f640f3e9b22ce366c014d00c51198c0de837fcf06eb277dbe91c84f5a39727d5d60001b613553565b612fe37ff2a398dec87ced93ae3cbba671a8c4ce313b9d755fd551aade15e3a16e1e6ecb60001b613553565b8c81600001819055506130187f33e7fa782ec497815c75df409203e9e3a69200f4e1fa55b64da4d0f264f3dffb60001b613553565b6130447f603f4be081dabe4238dd480b37be18ef710d8e18c3469e52c0a6ddab00a8a61c60001b613553565b8b81600101819055506130797fbf288863ca6fddd32e879f4b79bd4dd425c392a5fcef5f983f8f08e1ef605b5060001b613553565b6130a57ff2a177ad06ef67b9717f15fcf34cc70f340b3cc6d6f14bb593e821bf9b06501160001b613553565b8a81600201819055506130da7ffcd4deeacae774eaeb62042d1a9e4b0cec53e040646d9619f79593144a07591d60001b613553565b6131067fd0eb1c6e1a157f4ecce99b20ed040702d0b4fd4b8cb95fb2fea84c089bfe3ea560001b613553565b89816003018190555061313b7fcfe1f9dd13cf2d9b481193f3cc530b6b1a8de05ccdd7d3924422faca7f18186260001b613553565b6131677fe545a543d3c586e2ab33ab06aa56cd973639d8eb2c241a55718cc08e064a9ea460001b613553565b88816004018190555061319c7f432f09bf2bbb2cfa048f0ac7c4f99231c483765887abc3c25dad6772b7f01b6d60001b613553565b6131c87fcb43f8134b94ad527bea6b907ab1a5290e282ab5ddd2a6f18f172b4d5f36e2a260001b613553565b848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132377f14faaeb3648c1d505407846e7c6b7679b19e9b2dc90e1d9097c5e2ae73aec88060001b613553565b6132637f60fcde9fb8e94a807ecff08d1f13c7c512e0331b52f71232068523e29dcab0bc60001b613553565b868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b60006132c2614618565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613395575061339485336132b8565b5b6133d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cb90617110565b60405180910390fd5b6133e233868686868661493f565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613450906178c6565b60405180910390fd5b613461614618565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b50565b60006135847f0fabcbadc4a10086619fdc1814df79dd4a107858f209f6d947174c48415bc30e60001b614645565b6135b07ff97eaa9356f2efcb5cb2effd46690d592ef2728f57d91a5d700a0e7160a8610f60001b614645565b6135dc7f91a20df0ed4ea76380ecab21b298646da37e59f23eabc0cba603b696f95fc95260001b614645565b60186000369050101580156135f657506135f5336117ba565b5b15613662576136277f9ce1aee594fa4a6ffea26291bd008baa8acfcecc91d62a5d1ad6f3dc69f1ae6860001b614645565b6136537f50849634e83f066fd0501cde170910f86107f0b23bd24d8ce1e297ffe212663960001b614645565b601436033560601c90506136ee565b61368e7fe0cdb04f9080e90b216f114284e970caeb1e86018be111e6ac076ec090965af160001b614645565b6136ba7fca7dcfacd32360eedca4bf35c474c6d2fe16fc049ebbc937fa5eb0cc2c64408560001b614645565b6136e67fcb673a6e911fca4f124234d139cf95e7fdec288e65dee5432335cf18e818103060001b614645565b3390506136ef565b5b90565b60006137207f5ce04ef2e9f839031f089bd076ce06e9b896a48675dc51b63cb4955c3d885e1e60001b614963565b61374c7fb5b59fb0f64986a01f06090b75f111e3919ff48e63ec85a92653657f361588ad60001b614963565b6137787f0e132ebeed99e77224bc55e57d440fd757f061699bad2ef5eff0f181fc8c93c760001b614963565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506137c97f457b16e77325cb925460189c13afe8380ab16f405ec2ae94094a29ef747143d260001b614963565b8091505090565b600081600001549050919050565b6000816040516020016137f1919061795d565b604051602081830303815290604052805190602001209050919050565b600080600061381d8585614966565b9150915061382a816149e7565b819250505092915050565b60006138637f621434c9fd2e8bba0ec1e8665c6852f4a9919372e89bb045ed4a46aee0a51fe460001b614bb3565b61388f7f563cb72bde513957c46c4fa0753bb9816050c133ed604584517c0f39a73e4eed60001b614bb3565b6138bb7f7f53722e1ed3903aa24ee1e622ad9a65b4217ee614f3685b860a52a8be9fc95760001b614bb3565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061390c7f3e1bdcbbbb16eabd821040291754918d2051e700c9a0133e121019f9de911ecd60001b614bb3565b8091505090565b60006139417f72efb1d40a976cae6eeae9e878b7b30d9a49a5cdd1ab47a739590880a294cec460001b613553565b61396d7fcf169b6a538dc0f6c0102feed0b37c54f672f3e681b5269dc99961f7c9801c3160001b613553565b6139997f2725c06dd82edbad3f9b872af6a16699bd282780be9bd922071dcbfbc52d295d60001b613553565b60006139a36136f2565b600101600086815260200190815260200160002090506139e57fed84f1a88251221452e61da921c1b9d7ed5b46b3d7f38adc2124217f80b4c05760001b613553565b613a117fa02fa8de6f13ca3baee48e7c621a464e34de7768755a1eba6dbb3f1e786891ce60001b613553565b613a3d7f9b07797a0047f1a2b2e4b7a9979a95d9fbb015f879b00e6d4a4a29469d3c58a560001b613553565b8381600601548260030154613a5291906175bc565b1015613a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8a906179cf565b60405180910390fd5b613abf7fcb40fa9eaab8061dabc4c511b9a94536ef501a174ee019c004a607ae8995185260001b613553565b613aeb7f66645bdcce296b125239319745699d993d6c819d43cdba8b5590e076b35817d260001b613553565b613b177f3814e112ad9231e1448ae67c1ba054d8935915728027d055249ab3a2874aa50d60001b613553565b613b437fc359b819cbf6abc9ffff042968bc9144b1b770bb16b8bb72111bcdd780cab06260001b613553565b806000015442118015613b5a575080600101544211155b613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090617a3b565b60405180910390fd5b613bc57fd294e1e74386a0df78f440313618ed73a03640b6d18e09da6f8c2131ad6384ff60001b613553565b613bf17f6f3a1b072b7cbcf96b8f486bc4f40e0a89db93f534dfcdc169a1900be3f4a1bb60001b613553565b613c1d7f2f1086299e035b64320074596a23768d4815ee96be84e80201eaeeb3188328a860001b613553565b613c497ffcc15ab5433ff92b3f86fbd6208ea4fd592f1d4ba1924a0902df190106170c0b60001b613553565b838160020154613c599190617562565b3414613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190617aa7565b60405180910390fd5b613cc67fec7aa35ac4c5d18865f9724057d532be47be3a3abfea493997833eb77ee599ba60001b613553565b613cf27fa81469beb7e3ae07c5eaf3902ff05920d276e1048c7d7e79678047abc5b2acdd60001b613553565b613d1e7fb5580bda63201eef46e1894f3354ae8234048c14ff0ab480eec3f030a4acbb6660001b613553565b83816006016000828254613d3291906174f1565b92505081905550613d657fd52882e36a1ad9ab5b750c4e7d191b0f1a855d2822c7a8070536389830309cdc60001b613553565b613d917fdfa403db413f5fba67cca52f1fb76479f1fd13a498328f86d6d0336db0ddfea760001b613553565b613dda8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b613e067f9e3bf88b4b5b6e504bc0b1b1310177ddc269a736f56bf73cc454088a54cb652460001b613553565b613e327fdb225c249b2e49c927b2a9d5ec1e9df5d04653a4e58125e4c69a75d46d4eab2b60001b613553565b613e4d83868660405180602001604052806000815250614bb6565b613e797f733caed6c410a8451c0bdd5a388c38a8bb22d226a1d58d6b2ad3be0f405d28fe60001b613553565b613ea57fc23e2a994cddb2835043be74384867ad8dd5eeea927ea7e5180208f983a9b29460001b613553565b60008160020154111561415257613ede7fc47bae03022c822ca2c6d9ca6d452c01eee2598acd60dbd76dd5ade7f00d37f660001b613553565b613f0a7fb71ae19af149b322d2bf51ad08027d1f67e589ddf89b71ed620aa0dd59aceb7660001b613553565b613f367f0457c7f73790240af84972ff8a82b68559af57f3f8a9dbf5c2e53ed03dd2907260001b613553565b60006064826004015434613f4a9190617562565b613f54919061746a565b9050613f827feec6d14385b21131966c80c452d808575f399b22e069110a60e09be7fb4a07a760001b613553565b613fae7f5d7cf90e8b67ffda5c86f2490eff2429c07d179d3d4a0d21e8b92d0b7a479a0260001b613553565b60008134613fbc91906175bc565b9050613fea7fb3513e574992c008466e9b30a8a6dcc4050e1570090ce65a8455b3c0117fdd5660001b613553565b6140167f68b96afc572ef1dfd8edba56f833f5841092fce6210d283eac03413c8df37aea60001b613553565b8260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614080573d6000803e3d6000fd5b506140ad7fbfa50c3de55e4441031b004d9472d9f431265501bc9cc2701ae2de73c8c020fd60001b613553565b6140d97fdfbe64df54971a58fd9cf29bf8da9241ca863845e2377fd7b88f8a19132d86db60001b613553565b6140e1613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561414a573d6000803e3d6000fd5b50505061417f565b61417e7fb45b90fd42a7ff2d68678a574cbec27dad17991519a6567b045aa604418423b660001b613553565b5b6141ab7f0d031380eb99469c9a9b657726f4b0b7eb51c1c9c87aa69acb27c14d86b44bf560001b613553565b6141d77f1de7d8267f4f82897b0b046701c263241bf2e099fd317b8e91e44fec0627fd1760001b613553565b83858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142487f12fcb7150f41d198cc560721d9fe4a8b9b9675b3c97296f71de583b19f20905f60001b613553565b6142747f51c910e3280240a9da13a26a918f1bdee1b640ef3f81c307a8181a8b85b8b51c60001b613553565b60019150509392505050565b50565b60006142b17f37178690aaa1dfd0c6c3d44a41adbe336ddf4e47b2b013705f748d17f953a4f960001b614bd7565b6142dd7fb61c1cab06bcac74cb6fcec39279be9822daecce53b0d226a7f55aaa4694a84160001b614bd7565b6143097f390cbf5b98e53b9eb14b6ef693414cb3bd075af27cf444b8236e59e0e311394260001b614bd7565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905061435a7f2e97ffd5dadbc67c0d3ba2581f455f642621064ef90f5a7cfc10aed47737e18660001b614bd7565b8091505090565b600061438f7fc12b04ea53e4473ef466818b7c8c94c90f6bd77205d7c9b82f6a5d4de196a6a960001b614bda565b6143bb7f89a1f54751c7a873ff3e8896571a78db56811d12ddf8d5d28efd5aa5386e903760001b614bda565b6143e77fdedee73f76c7a07a4b418b59e38145ca6423d0815832d433528f8a1d7b01551a60001b614bda565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390506144387f47b0161d8c57ec0e65647be2a620071b1a78d3a9606f10c9cd43c92ffe7741da60001b614bda565b8091505090565b61446b7f431bc7f452809a3732c5c1a0b6c51dcd24cd363bf1f82908d52d72546076378460001b6144e6565b6144977f52240686f143432fc52d707de7b9ed833ae7ca5093172522026947ac54409f8760001b6144e6565b6144c37f7327e968d0500ce8cdfbfe0fdf076e04cd8669b4e88c690338cd4426d8446aba60001b6144e6565b806144cc6144e9565b60010190805190602001906144e2929190615e8f565b5050565b50565b60006145177fa9f6d638cb34cb261597ae232ca47e1e05373b83d270d71d783851218479d26560001b614bdd565b6145437fb459fc962a4b7a702eeba11b454e002d1e5fe7f2f71ac0249e476d78be45e16e60001b614bdd565b61456f7f373e0f10c4bbfcba941e9d7478208b12b2e79e04105738322bffaa27a05a837260001b614bdd565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390506145c07f3b7a75e893a3d4e113ca24a01863558add93663b17f32ee1a0d99b5a4d4f7c1060001b614bdd565b8091505090565b60006145ed6145d4614be0565b6001016000848152602001908152602001600020614c0d565b9050919050565b614602868686868686614c22565b614610868686868686614f27565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b50565b60606000614654614be0565b60010160008481526020019081526020016000209050600061467582614c0d565b67ffffffffffffffff81111561468e5761468d61611a565b5b6040519080825280602002602001820160405280156146bc5781602001602082028036833780820191505090505b50905060005b6146cb83614c0d565b81101561473f576146e581846150fe90919063ffffffff16565b8282815181106146f8576146f76171c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506146c2565b508092505050919050565b60606000614756614be0565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006147a382615118565b67ffffffffffffffff8111156147bc576147bb61611a565b5b6040519080825280602002602001820160405280156147ea5781602001602082028036833780820191505090505b50905060005b6147f983615118565b81101561483f57614813818461512d90919063ffffffff16565b828281518110614826576148256171c2565b5b60200260200101818152505080806001019150506147f0565b508092505050919050565b6000614854614be0565b6000016000838152602001908152602001600020549050919050565b61489c7f714373bb2f2144c87b3e52bc60c4d5a7066b2e23d5bf408bcb9eaf24ccb9cf0260001b6144e6565b6148c87fa2db81b69fdf15a5c420c8ff9c6e3def280ef84cf31afa9558cd3f6c40b16f2660001b6144e6565b6148f47f0863a359a857d21a5d3981b95d1fc7d088b2420cf573ea197c0a39c7de02dd5760001b6144e6565b806148fd6144e9565b60000160008481526020019081526020016000209080519060200190614924929190615e8f565b505050565b6001816000016000828254019250508190555050565b61494d868686868686615147565b61495b8686868686866153be565b505050505050565b50565b60008060418351036149a75760008060006020860151925060408601519150606086015160001a905061499b87828585615595565b945094505050506149e0565b60408351036149d75760008060208501519150604085015190506149cc8683836156a1565b9350935050506149e0565b60006002915091505b9250929050565b600060048111156149fb576149fa617ac7565b5b816004811115614a0e57614a0d617ac7565b5b0315614bb05760016004811115614a2857614a27617ac7565b5b816004811115614a3b57614a3a617ac7565b5b03614a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a7290617b42565b60405180910390fd5b60026004811115614a8f57614a8e617ac7565b5b816004811115614aa257614aa1617ac7565b5b03614ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ad990617bae565b60405180910390fd5b60036004811115614af657614af5617ac7565b5b816004811115614b0957614b08617ac7565b5b03614b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b4090617c40565b60405180910390fd5b600480811115614b5c57614b5b617ac7565b5b816004811115614b6f57614b6e617ac7565b5b03614baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ba690617cd2565b60405180910390fd5b5b50565b50565b614bc284848484615700565b614bd1336000868686866153be565b50505050565b50565b50565b50565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614c1b82600001615883565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603614c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c8890617d64565b60405180910390fd5b8151835114614cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ccc90617df6565b60405180910390fd5b614ce3868686868686615894565b6000614ced614618565b600001905060005b8451811015614e9f576000858281518110614d1357614d126171c2565b5b602002602001015190506000858381518110614d3257614d316171c2565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dca90617e88565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380600101945050508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614e9191906174f1565b925050819055505050614cf5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614f16929190617ea8565b60405180910390a450505050505050565b614f468473ffffffffffffffffffffffffffffffffffffffff166158aa565b156150f6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401614f8c959493929190617f34565b6020604051808303816000875af1925050508015614fc857506040513d601f19601f82011682018060405250810190614fc59190617fb1565b60015b61506d57614fd4617feb565b806308c379a0036150305750614fe861800d565b80614ff35750615032565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161502791906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150649061810f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146150f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150eb906181a1565b60405180910390fd5b505b505050505050565b600061510d83600001836158bd565b60001c905092915050565b600061512682600001615883565b9050919050565b600061513c83600001836158bd565b60001c905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036151b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151ad90617d64565b60405180910390fd5b6151d48686866151c587615931565b6151ce87615931565b86615894565b60006151de614618565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561527a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161527190617e88565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461533091906174f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516153ad9291906181c1565b60405180910390a450505050505050565b6153dd8473ffffffffffffffffffffffffffffffffffffffff166158aa565b1561558d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016154239594939291906181ea565b6020604051808303816000875af192505050801561545f57506040513d601f19601f8201168201806040525081019061545c9190617fb1565b60015b6155045761546b617feb565b806308c379a0036154c7575061547f61800d565b8061548a57506154c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154be91906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154fb9061810f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461558b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615582906181a1565b60405180910390fd5b505b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156155d0576000600391509150615698565b601b8560ff16141580156155e85750601c8560ff1614155b156155fa576000600491509150615698565b60006001878787876040516000815260200160405260405161561f949392919061826f565b6020604051602081039080840390855afa158015615641573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361568f57600060019250925050615698565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6156e491906174f1565b90506156f287828885615595565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361576f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161576690618326565b60405180910390fd5b61578e3360008661577f87615931565b61578887615931565b86615894565b81615797614618565b600001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546157f791906174f1565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516158759291906181c1565b60405180910390a450505050565b600081600001805490509050919050565b6158a28686868686866159ab565b505050505050565b600080823b905060008111915050919050565b600081836000018054905011615908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158ff906183b8565b60405180910390fd5b82600001828154811061591e5761591d6171c2565b5b9060005260206000200154905092915050565b60606000600167ffffffffffffffff8111156159505761594f61611a565b5b60405190808252806020026020018201604052801561597e5781602001602082028036833780820191505090505b5090508281600081518110615996576159956171c2565b5b60200260200101818152505080915050919050565b6159b98686868686866159c1565b505050505050565b6159cf868686868686615c72565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614615c6a576000615a0c614be0565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015615c64576000878281518110615ac157615ac06171c2565b5b602002602001015190506000811115615c56576000898381518110615ae957615ae86171c2565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603615b5857818760000160008381526020019081526020016000206000828254615b4c91906174f1565b92505081905550615ba3565b81615b638d836133e9565b03615ba257615b8c8c876000848152602001908152602001600020615c7a90919063ffffffff16565b50615ba08186615caa90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1603615c0857818760000160008381526020019081526020016000206000828254615bfc91906175bc565b92505081905550615c54565b6000615c148c836133e9565b03615c5357615c3d8b876000848152602001908152602001600020615cc490919063ffffffff16565b50615c518185615cf490919063ffffffff16565b505b5b505b818060010192505050615aa3565b50505050505b505050505050565b505050505050565b6000615ca2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615d0e565b905092915050565b6000615cbc836000018360001b615d0e565b905092915050565b6000615cec836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615dfc565b905092915050565b6000615d06836000018360001b615dfc565b905092915050565b60008083600101600084815260200190815260200160002054905060008114615df057600084600001600186600001805490500381548110615d5357615d526171c2565b5b9060005260206000200154905080856000016001840381548110615d7a57615d796171c2565b5b906000526020600020018190555081856001016000838152602001908152602001600020819055505083600001805480615db757615db66183d8565b5b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050615df6565b60009150505b92915050565b6000615e088383615e6c565b615e61578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615e66565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054615e9b90616f0d565b90600052602060002090601f016020900481019282615ebd5760008555615f04565b82601f10615ed657805160ff1916838001178555615f04565b82800160010185558215615f04579182015b82811115615f03578251825591602001919060010190615ee8565b5b509050615f119190615f15565b5090565b5b80821115615f2e576000816000905550600101615f16565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615f7182615f46565b9050919050565b615f8181615f66565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b6000819050919050565b615fb781615fa4565b8114615fc257600080fd5b50565b600081359050615fd481615fae565b92915050565b60008060408385031215615ff157615ff0615f3c565b5b6000615fff85828601615f8f565b925050602061601085828601615fc5565b9150509250929050565b61602381615fa4565b82525050565b600060208201905061603e600083018461601a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61607981616044565b811461608457600080fd5b50565b60008135905061609681616070565b92915050565b6000602082840312156160b2576160b1615f3c565b5b60006160c084828501616087565b91505092915050565b60008115159050919050565b6160de816160c9565b82525050565b60006020820190506160f960008301846160d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61615282616109565b810181811067ffffffffffffffff821117156161715761617061611a565b5b80604052505050565b6000616184615f32565b90506161908282616149565b919050565b600067ffffffffffffffff8211156161b0576161af61611a565b5b6161b982616109565b9050602081019050919050565b82818337600083830152505050565b60006161e86161e384616195565b61617a565b90508281526020810184848401111561620457616203616104565b5b61620f8482856161c6565b509392505050565b600082601f83011261622c5761622b6160ff565b5b813561623c8482602086016161d5565b91505092915050565b60008060006060848603121561625e5761625d615f3c565b5b600061626c86828701615fc5565b935050602061627d86828701615fc5565b925050604084013567ffffffffffffffff81111561629e5761629d615f41565b5b6162aa86828701616217565b9150509250925092565b600067ffffffffffffffff8211156162cf576162ce61611a565b5b6162d882616109565b9050602081019050919050565b60006162f86162f3846162b4565b61617a565b90508281526020810184848401111561631457616313616104565b5b61631f8482856161c6565b509392505050565b600082601f83011261633c5761633b6160ff565b5b813561634c8482602086016162e5565b91505092915050565b600080600080600060a0868803121561637157616370615f3c565b5b600086013567ffffffffffffffff81111561638f5761638e615f41565b5b61639b88828901616327565b95505060206163ac88828901615f8f565b94505060406163bd88828901615f8f565b93505060606163ce88828901615f8f565b92505060806163df88828901615f8f565b9150509295509295909350565b60006020828403121561640257616401615f3c565b5b600061641084828501615fc5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616453578082015181840152602081019050616438565b83811115616462576000848401525b50505050565b600061647382616419565b61647d8185616424565b935061648d818560208601616435565b61649681616109565b840191505092915050565b600060208201905081810360008301526164bb8184616468565b905092915050565b6000602082840312156164d9576164d8615f3c565b5b60006164e784828501615f8f565b91505092915050565b600067ffffffffffffffff82111561650b5761650a61611a565b5b602082029050602081019050919050565b600080fd5b600061653461652f846164f0565b61617a565b905080838252602082019050602084028301858111156165575761655661651c565b5b835b81811015616580578061656c8882615fc5565b845260208401935050602081019050616559565b5050509392505050565b600082601f83011261659f5761659e6160ff565b5b81356165af848260208601616521565b91505092915050565b600080600080600060a086880312156165d4576165d3615f3c565b5b60006165e288828901615f8f565b95505060206165f388828901615f8f565b945050604086013567ffffffffffffffff81111561661457616613615f41565b5b6166208882890161658a565b935050606086013567ffffffffffffffff81111561664157616640615f41565b5b61664d8882890161658a565b925050608086013567ffffffffffffffff81111561666e5761666d615f41565b5b61667a88828901616217565b9150509295509295909350565b61669081615f66565b82525050565b60006020820190506166ab6000830184616687565b92915050565b600067ffffffffffffffff8211156166cc576166cb61611a565b5b602082029050602081019050919050565b60006166f06166eb846166b1565b61617a565b905080838252602082019050602084028301858111156167135761671261651c565b5b835b8181101561673c57806167288882615f8f565b845260208401935050602081019050616715565b5050509392505050565b600082601f83011261675b5761675a6160ff565b5b813561676b8482602086016166dd565b91505092915050565b6000806040838503121561678b5761678a615f3c565b5b600083013567ffffffffffffffff8111156167a9576167a8615f41565b5b6167b585828601616746565b925050602083013567ffffffffffffffff8111156167d6576167d5615f41565b5b6167e28582860161658a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61682181615fa4565b82525050565b60006168338383616818565b60208301905092915050565b6000602082019050919050565b6000616857826167ec565b61686181856167f7565b935061686c83616808565b8060005b8381101561689d5781516168848882616827565b975061688f8361683f565b925050600181019050616870565b5085935050505092915050565b600060208201905081810360008301526168c4818461684c565b905092915050565b600060e0820190506168e1600083018a61601a565b6168ee602083018961601a565b6168fb604083018861601a565b616908606083018761601a565b616915608083018661601a565b61692260a0830185616687565b61692f60c083018461601a565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61697081615f66565b82525050565b60006169828383616967565b60208301905092915050565b6000602082019050919050565b60006169a68261693b565b6169b08185616946565b93506169bb83616957565b8060005b838110156169ec5781516169d38882616976565b97506169de8361698e565b9250506001810190506169bf565b5085935050505092915050565b60006020820190508181036000830152616a13818461699b565b905092915050565b600080fd5b60008083601f840112616a3657616a356160ff565b5b8235905067ffffffffffffffff811115616a5357616a52616a1b565b5b602083019150836020820283011115616a6f57616a6e61651c565b5b9250929050565b600080600060408486031215616a8f57616a8e615f3c565b5b600084013567ffffffffffffffff811115616aad57616aac615f41565b5b616ab986828701616a20565b9350935050602084013567ffffffffffffffff811115616adc57616adb615f41565b5b616ae886828701616217565b9150509250925092565b60008060408385031215616b0957616b08615f3c565b5b6000616b1785828601615fc5565b9250506020616b2885828601615f8f565b9150509250929050565b616b3b816160c9565b8114616b4657600080fd5b50565b600081359050616b5881616b32565b92915050565b60008060408385031215616b7557616b74615f3c565b5b6000616b8385828601615f8f565b9250506020616b9485828601616b49565b9150509250929050565b600080600080600080600060e0888a031215616bbd57616bbc615f3c565b5b600088013567ffffffffffffffff811115616bdb57616bda615f41565b5b616be78a828b01616327565b9750506020616bf88a828b01615fc5565b9650506040616c098a828b01615fc5565b9550506060616c1a8a828b01615fc5565b9450506080616c2b8a828b01615fc5565b93505060a0616c3c8a828b01615fc5565b92505060c088013567ffffffffffffffff811115616c5d57616c5c615f41565b5b616c698a828b01616217565b91505092959891949750929550565b60008060408385031215616c8f57616c8e615f3c565b5b6000616c9d85828601615f8f565b9250506020616cae85828601615f8f565b9150509250929050565b600080600080600060a08688031215616cd457616cd3615f3c565b5b6000616ce288828901615f8f565b9550506020616cf388828901615f8f565b9450506040616d0488828901615fc5565b9350506060616d1588828901615fc5565b925050608086013567ffffffffffffffff811115616d3657616d35615f41565b5b616d4288828901616217565b9150509295509295909350565b6000819050919050565b616d6a616d6582615fa4565b616d4f565b82525050565b60008160601b9050919050565b6000616d8882616d70565b9050919050565b6000616d9a82616d7d565b9050919050565b616db2616dad82615f66565b616d8f565b82525050565b6000616dc48287616d59565b602082019150616dd48286616d59565b602082019150616de48285616da1565b601482019150616df48284616d59565b60208201915081905095945050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000616e3c600283616424565b9150616e4782616e06565b602082019050919050565b60006020820190508181036000830152616e6b81616e2f565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000616ea8600283616424565b9150616eb382616e72565b602082019050919050565b60006020820190508181036000830152616ed781616e9b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680616f2557607f821691505b602082108103616f3857616f37616ede565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000616f74601d83616424565b9150616f7f82616f3e565b602082019050919050565b60006020820190508181036000830152616fa381616f67565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154616fd781616f0d565b616fe18186616faa565b94506001821660008114616ffc576001811461700d57617040565b60ff19831686528186019350617040565b61701685616fb5565b60005b8381101561703857815481890152600182019150602081019050617019565b838801955050505b50505092915050565b600061705482616419565b61705e8185616faa565b935061706e818560208601616435565b80840191505092915050565b60006170868285616fca565b91506170928284617049565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006170fa602983616424565b91506171058261709e565b604082019050919050565b60006020820190508181036000830152617129816170ed565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061718c602983616424565b915061719782617130565b604082019050919050565b600060208201905081810360008301526171bb8161717f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061724d603183616424565b9150617258826171f1565b604082019050919050565b6000602082019050818103600083015261727c81617240565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b60006172b9600383616424565b91506172c482617283565b602082019050919050565b600060208201905081810360008301526172e8816172ac565b9050919050565b7f4e43000000000000000000000000000000000000000000000000000000000000600082015250565b6000617325600283616424565b9150617330826172ef565b602082019050919050565b6000602082019050818103600083015261735481617318565b9050919050565b600081905092915050565b600080fd5b6000617377838561735b565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156173aa576173a9617366565b5b6020830292506173bb8385846161c6565b82840190509392505050565b60006173d482858761736b565b91506173e08284616da1565b601482019150819050949350505050565b60006173fd8284616da1565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061747582615fa4565b915061748083615fa4565b9250826174905761748f61740c565b5b828204905092915050565b60006174a682615f46565b9050919050565b60006174b882616d7d565b9050919050565b6174d06174cb8261749b565b6174ad565b82525050565b60006174e282846174bf565b60148201915081905092915050565b60006174fc82615fa4565b915061750783615fa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561753c5761753b61743b565b5b828201905092915050565b60006175538284616d59565b60208201915081905092915050565b600061756d82615fa4565b915061757883615fa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156175b1576175b061743b565b5b828202905092915050565b60006175c782615fa4565b91506175d283615fa4565b9250828210156175e5576175e461743b565b5b828203905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061764c602983616424565b9150617657826175f0565b604082019050919050565b6000602082019050818103600083015261767b8161763f565b9050919050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006176b8600283616424565b91506176c382617682565b602082019050919050565b600060208201905081810360008301526176e7816176ab565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617724600383616424565b915061772f826176ee565b602082019050919050565b6000602082019050818103600083015261775381617717565b9050919050565b7f4941430000000000000000000000000000000000000000000000000000000000600082015250565b6000617790600383616424565b915061779b8261775a565b602082019050919050565b600060208201905081810360008301526177bf81617783565b9050919050565b60006177d2828b617049565b91506177de828a616d59565b6020820191506177ee8289616d59565b6020820191506177fe8288616d59565b60208201915061780e8287616d59565b60208201915061781e8286616d59565b60208201915061782e8285616da1565b60148201915061783e8284616d59565b6020820191508190509998505050505050505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006178b0602b83616424565b91506178bb82617854565b604082019050919050565b600060208201905081810360008301526178df816178a3565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061791c601c83616faa565b9150617927826178e6565b601c82019050919050565b6000819050919050565b6000819050919050565b61795761795282617932565b61793c565b82525050565b60006179688261790f565b91506179748284617946565b60208201915081905092915050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179b9600283616424565b91506179c482617983565b602082019050919050565b600060208201905081810360008301526179e8816179ac565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a25600383616424565b9150617a30826179ef565b602082019050919050565b60006020820190508181036000830152617a5481617a18565b9050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617a91600283616424565b9150617a9c82617a5b565b602082019050919050565b60006020820190508181036000830152617ac081617a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617b2c601883616424565b9150617b3782617af6565b602082019050919050565b60006020820190508181036000830152617b5b81617b1f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617b98601f83616424565b9150617ba382617b62565b602082019050919050565b60006020820190508181036000830152617bc781617b8b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617c2a602283616424565b9150617c3582617bce565b604082019050919050565b60006020820190508181036000830152617c5981617c1d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617cbc602283616424565b9150617cc782617c60565b604082019050919050565b60006020820190508181036000830152617ceb81617caf565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000617d4e602583616424565b9150617d5982617cf2565b604082019050919050565b60006020820190508181036000830152617d7d81617d41565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000617de0602883616424565b9150617deb82617d84565b604082019050919050565b60006020820190508181036000830152617e0f81617dd3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000617e72602b83616424565b9150617e7d82617e16565b604082019050919050565b60006020820190508181036000830152617ea181617e65565b9050919050565b60006040820190508181036000830152617ec2818561684c565b90508181036020830152617ed6818461684c565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000617f0682617edf565b617f108185617eea565b9350617f20818560208601616435565b617f2981616109565b840191505092915050565b600060a082019050617f496000830188616687565b617f566020830187616687565b8181036040830152617f68818661684c565b90508181036060830152617f7c818561684c565b90508181036080830152617f908184617efb565b90509695505050505050565b600081519050617fab81616070565b92915050565b600060208284031215617fc757617fc6615f3c565b5b6000617fd584828501617f9c565b91505092915050565b60008160e01c9050919050565b600060033d111561800a5760046000803e618007600051617fde565b90505b90565b600060443d1061809a5761801f615f32565b60043d036004823e80513d602482011167ffffffffffffffff8211171561804757505061809a565b808201805167ffffffffffffffff811115618065575050505061809a565b80602083010160043d03850181111561808257505050505061809a565b61809182602001850186616149565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006180f9603483616424565b91506181048261809d565b604082019050919050565b60006020820190508181036000830152618128816180ec565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061818b602883616424565b91506181968261812f565b604082019050919050565b600060208201905081810360008301526181ba8161817e565b9050919050565b60006040820190506181d6600083018561601a565b6181e3602083018461601a565b9392505050565b600060a0820190506181ff6000830188616687565b61820c6020830187616687565b618219604083018661601a565b618226606083018561601a565b81810360808301526182388184617efb565b90509695505050505050565b61824d81617932565b82525050565b600060ff82169050919050565b61826981618253565b82525050565b60006080820190506182846000830187618244565b6182916020830186618260565b61829e6040830185618244565b6182ab6060830184618244565b95945050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618310602183616424565b915061831b826182b4565b604082019050919050565b6000602082019050818103600083015261833f81618303565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006183a2602283616424565b91506183ad82618346565b604082019050919050565b600060208201905081810360008301526183d181618395565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203a1ec0298cbcc8e319805f08baccd58e9b2bfea30b78147c3fb987dc381ea1db64736f6c634300080d0033"; type CyberDestinationUtilityFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts index 2566cb6..23e0747 100644 --- a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts @@ -475,6 +475,30 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "mintRandom", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, { inputs: [ { @@ -507,6 +531,30 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "_max", + type: "uint256", + }, + { + internalType: "address", + name: "_sender", + type: "address", + }, + ], + name: "random", + outputs: [ + { + internalType: "uint256", + name: "number", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -702,7 +750,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613deb806100206000396000f3fe6080604052600436106101745760003560e01c8063572b6c05116100cb578063b3a721d11161007f578063e751c98111610059578063e751c98114610527578063e985e9c514610547578063f242432a146105bc57600080fd5b8063b3a721d11461049d578063bc01188e146104bd578063bd85b0391461050757600080fd5b80636dcfd841116100b05780636dcfd8411461043057806385bff2e71461045d578063a22cb4651461047d57600080fd5b8063572b6c051461036a5780636787d449146103c557600080fd5b806313ba55df1161012d5780632eb2c2d6116101075780632eb2c2d6146102b2578063481c6a75146102d25780634e1273f41461033d57600080fd5b806313ba55df1461023e57806318160ddd1461025e5780631b0239471461029257600080fd5b806308dc9f421161015e57806308dc9f42146101dc5780630b885ac3146101ef5780630e89341c1461021157600080fd5b8062fdd58e1461017957806301ffc9a7146101ac575b600080fd5b34801561018557600080fd5b50610199610194366004613187565b6105dc565b6040519081526020015b60405180910390f35b3480156101b857600080fd5b506101cc6101c73660046131df565b6105f1565b60405190151581526020016101a3565b6101cc6101ea36600461330f565b61064a565b3480156101fb57600080fd5b5061020f61020a36600461335f565b610ab4565b005b34801561021d57600080fd5b5061023161022c3660046133df565b610cf8565b6040516101a3919061346e565b34801561024a57600080fd5b506101996102593660046133df565b610e50565b34801561026a57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6054610199565b34801561029e57600080fd5b506101996102ad366004613481565b610e5b565b3480156102be57600080fd5b5061020f6102cd366004613531565b610ea5565b3480156102de57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a3565b34801561034957600080fd5b5061035d6103583660046135db565b610f9f565b6040516101a391906136e1565b34801561037657600080fd5b506101cc610385366004613481565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff90811691161490565b3480156103d157600080fd5b506103e56103e03660046133df565b6111fa565b604080519788526020880196909652948601939093526060850191909152608084015273ffffffffffffffffffffffffffffffffffffffff1660a083015260c082015260e0016101a3565b34801561043c57600080fd5b5061045061044b3660046133df565b6112d4565b6040516101a391906136f4565b34801561046957600080fd5b5061035d610478366004613481565b6112df565b34801561048957600080fd5b5061020f61049836600461374e565b6112ea565b3480156104a957600080fd5b506101996104b836600461378a565b61142b565b3480156104c957600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a625473ffffffffffffffffffffffffffffffffffffffff16610318565b34801561051357600080fd5b506101996105223660046133df565b6114db565b34801561053357600080fd5b506101996105423660046137b6565b61150e565b34801561055357600080fd5b506101cc61056236600461384a565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832093909416825291909152205460ff1690565b3480156105c857600080fd5b5061020f6105d7366004613874565b611892565b60006105e88383611985565b90505b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604081205460ff166105eb565b600080610655611a64565b60008681527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260409020600681015460038201549293509091869161069c91613908565b10156106ef5760405162461bcd60e51b815260206004820152600260248201527f435200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b805442118015610703575080600101544211155b61074f5760405162461bcd60e51b815260206004820152600360248201527f4f4f54000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b84816002015461075f919061391f565b34146107ad5760405162461bcd60e51b815260206004820152600260248201527f494100000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260078201602090815260408083205481519283018a9052908201889052606085811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690830152607482018190529190609401604051602081830303815290604052905060006108577f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90565b905060006108c3886108bd85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611ae5565b825490915073ffffffffffffffffffffffffffffffffffffffff80831691161461092f5760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b88856006016000828254610943919061395c565b909155505073ffffffffffffffffffffffffffffffffffffffff86166000908152600786016020526040902080546001019055610991868b8b60405180602001604052806000815250611b09565b600285015415610a5f57600060648660040154346109af919061391f565b6109b99190613974565b905060006109c78234613908565b600588015460405191925073ffffffffffffffffffffffffffffffffffffffff169082156108fc029083906000818181858888f19350505050158015610a11573d6000803e3d6000fd5b50600484015460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f19350505050158015610a5b573d6000803e3d6000fd5b5050505b888a8773ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a45060019998505050505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610b3a5760405162461bcd60e51b815260206004820152600260248201527f4e4f00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fd9b67a26000000000000000000000000000000000000000000000000000000006000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f845f7f8d885943dffdc1524acbd9538b2923f93aad26d306df3b8982c7f0632d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c3485611b2a565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5f8054938616938216939093179092557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a628054919094169116179091555050565b60008181527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c836020526040812080546060929190610d35906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906139af565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505090508051600003610e065760405162461bcd60e51b815260206004820152601d60248201527f455243313135355552493a20746f6b656e4964206e6f7420657869737400000060448201526064016106e6565b604051610e39907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c84908390602001613a1e565b604051602081830303815290604052915050919050565b60006105eb82611b60565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6160205260408120546105eb565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f18575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b610f8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611b96565b5050505050565b606081518351146110185760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106e6565b82517f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b9060009067ffffffffffffffff81111561105757611057613203565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b50905060005b85518110156111f157600073ffffffffffffffffffffffffffffffffffffffff168682815181106110b9576110b9613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361114a5760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106e6565b82600086838151811061115f5761115f613afb565b60200260200101518152602001908152602001600020600087838151811061118957611189613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106111de576111de613afb565b6020908102919091010152600101611086565b50949350505050565b60008181527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482918291829182918291829182036112865760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b805460018201546002830154600384015460048501546005860154600690960154949e939d50919b509950975073ffffffffffffffffffffffffffffffffffffffff90921695509350915050565b60606105eb82611bba565b60606105eb82611c93565b73ffffffffffffffffffffffffffffffffffffffff821633036113755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106e6565b3360008181527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008281527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482036114ab5760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600782016020526040902054949350505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea60205260408120546105eb565b60008061151b8888613908565b116115685760405162461bcd60e51b815260206004820152600260248201527f495400000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60648311156115b95760405162461bcd60e51b815260206004820152600360248201527f49534f000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b600084116116095760405162461bcd60e51b815260206004820152600360248201527f494143000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e6000611634611a64565b9050600061164182610e5b565b905060008b8b8b8b8b8b8888604051602001611664989796959493929190613b2a565b604051602081830303815290604052905060006116d9876108bd84805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b855490915073ffffffffffffffffffffffffffffffffffffffff8083169116146117455760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60028501549550611756868e611d69565b6117668560020180546001019055565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260038601602052604090208054600101905560007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe659600101600088815260200190815260200160002090508c81600001819055508b81600101819055508a8160020181905550898160030181905550888160040181905550848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480611905575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b6119775760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611dac565b600073ffffffffffffffffffffffffffffffffffffffff8316611a105760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016106e6565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff95909516845293905250205490565b600060183610801590611aad57507fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff1633145b15611add57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b503390565b90565b6000806000611af48585611dc8565b91509150611b0181611e36565b509392505050565b611b1584848484612025565b611b243360008686868661218c565b50505050565b8051611b5c907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c849060208401906130c5565b5050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206105eb906123d1565b611ba48686868686866123db565b611bb28686868686866126e3565b505050505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb60205260408120606091611bf3826123d1565b67ffffffffffffffff811115611c0b57611c0b613203565b604051908082528060200260200182016040528015611c34578160200160208202803683370190505b50905060005b611c43836123d1565b811015611b0157611c548382612876565b828281518110611c6657611c66613afb565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611c3a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec60205260408120606091611ce3826123d1565b67ffffffffffffffff811115611cfb57611cfb613203565b604051908082528060200260200182016040528015611d24578160200160208202803683370190505b50905060005b611d33836123d1565b811015611b0157611d448382612876565b828281518110611d5657611d56613afb565b6020908102919091010152600101611d2a565b60008281527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c83602090815260409091208251611da7928401906130c5565b505050565b611dba868686868686612882565b611bb286868686868661218c565b6000808251604103611dfe5760208301516040840151606085015160001a611df287828585612a88565b94509450505050611e2f565b8251604003611e275760208301516040840151611e1c868383612ba0565b935093505050611e2f565b506000905060025b9250929050565b6000816004811115611e4a57611e4a613b97565b03611e525750565b6001816004811115611e6657611e66613b97565b03611eb35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106e6565b6002816004811115611ec757611ec7613b97565b03611f145760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106e6565b6003816004811115611f2857611f28613b97565b03611f9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6004816004811115611faf57611faf613b97565b036120225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b50565b73ffffffffffffffffffffffffffffffffffffffff84166120ae5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6120cd336000866120be87612bf2565b6120c787612bf2565b86612c3d565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120805484929061212b90849061395c565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906122039089908990889088908890600401613bc6565b6020604051808303816000875af192505050801561225c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261225991810190613c16565b60015b61231157612268613c33565b806308c379a0036122a1575061227c613c4e565b8061228757506122a3565b8060405162461bcd60e51b81526004016106e6919061346e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106e6565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b50505050505050565b60006105eb825490565b73ffffffffffffffffffffffffffffffffffffffff84166124645760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b81518351146124db5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106e6565b6124e9868686868686612c3d565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60005b845181101561265b57600085828151811061252a5761252a613afb565b60200260200101519050600085838151811061254857612548613afb565b6020908102919091018101516000848152868352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156125fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008381526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320938590039093558a16815290812080546001959095019483929061264e90849061395c565b9091555061250d92505050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126d2929190613cf6565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061275a9089908990889088908890600401613d1b565b6020604051808303816000875af19250505080156127b3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526127b091810190613c16565b60015b6127bf57612268613c33565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b60006105e88383612c4b565b73ffffffffffffffffffffffffffffffffffffffff841661290b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b61291a8686866120be87612bf2565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020818152604080842073ffffffffffffffffffffffffffffffffffffffff8a16855290915290912054838110156129e05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008581526020838152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093879003909355871681529081208054859290612a2c90849061395c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8088169289821692918b16917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016126d2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612abf5750600090506003612b97565b8460ff16601b14158015612ad757508460ff16601c14155b15612ae85750600090506004612b97565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9057600060019250925050612b97565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831681612bd660ff86901c601b61395c565b9050612be487828885612a88565b935093505050935093915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c2c57612c2c613afb565b602090810291909101015292915050565b611bb2868686868686612cec565b81546000908210612cc45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b826000018281548110612cd957612cd9613afb565b9060005260206000200154905092915050565b611bb28686868686868373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611bb25773ffffffffffffffffffffffffffffffffffffffff85811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040808220928716825281207fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea927fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb929091905b8751811015612f22576000878281518110612dda57612dda613afb565b602002602001015190506000811115612f19576000898381518110612e0157612e01613afb565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603612e685760008181526020889052604081208054849290612e5d90849061395c565b90915550612e9d9050565b81612e738d83611985565b03612e9d576000818152602087905260409020612e90908d612f2f565b50612e9b8582612f51565b505b73ffffffffffffffffffffffffffffffffffffffff8b16612ee15760008181526020889052604081208054849290612ed6908490613908565b90915550612f179050565b612eeb8b82611985565b600003612f17576000818152602087905260409020612f0a908c612f5d565b50612f158482612f7f565b505b505b50600101612dbd565b5050505050505050505050565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416612f8b565b60006105e88383612f8b565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416613076565b60006105e88383613076565b6000818152600183016020526040812054801561306c57835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612fdb57612fdb613afb565b906000526020600020015490508085600001600184038154811061300157613001613afb565b600091825260208083209091019290925591825260018601905260409020819055835484908061303357613033613d86565b600190038181906000526020600020016000905590558360010160008481526020019081526020016000206000905560019150506105eb565b60009150506105eb565b60008181526001830160205260408120546130bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105eb565b5060006105eb565b8280546130d1906139af565b90600052602060002090601f0160209004810192826130f35760008555613139565b82601f1061310c57805160ff1916838001178555613139565b82800160010185558215613139579182015b8281111561313957825182559160200191906001019061311e565b50613145929150613149565b5090565b5b80821115613145576000815560010161314a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461318257600080fd5b919050565b6000806040838503121561319a57600080fd5b6131a38361315e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461202257600080fd5b6000602082840312156131f157600080fd5b81356131fc816131b1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561327657613276613203565b6040525050565b600082601f83011261328e57600080fd5b813567ffffffffffffffff8111156132a8576132a8613203565b6040516132dd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182613232565b8181528460208386010111156132f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561332457600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561334957600080fd5b6133558682870161327d565b9150509250925092565b600080600080600060a0868803121561337757600080fd5b853567ffffffffffffffff81111561338e57600080fd5b61339a8882890161327d565b9550506133a96020870161315e565b93506133b76040870161315e565b92506133c56060870161315e565b91506133d36080870161315e565b90509295509295909350565b6000602082840312156133f157600080fd5b5035919050565b60005b838110156134135781810151838201526020016133fb565b83811115611b245750506000910152565b6000815180845261343c8160208601602086016133f8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e86020830184613424565b60006020828403121561349357600080fd5b6105e88261315e565b600067ffffffffffffffff8211156134b6576134b6613203565b5060051b60200190565b600082601f8301126134d157600080fd5b813560206134de8261349c565b6040516134eb8282613232565b83815260059390931b850182019282810191508684111561350b57600080fd5b8286015b84811015613526578035835291830191830161350f565b509695505050505050565b600080600080600060a0868803121561354957600080fd5b6135528661315e565b94506135606020870161315e565b9350604086013567ffffffffffffffff8082111561357d57600080fd5b61358989838a016134c0565b9450606088013591508082111561359f57600080fd5b6135ab89838a016134c0565b935060808801359150808211156135c157600080fd5b506135ce8882890161327d565b9150509295509295909350565b600080604083850312156135ee57600080fd5b823567ffffffffffffffff8082111561360657600080fd5b818501915085601f83011261361a57600080fd5b813560206136278261349c565b6040516136348282613232565b83815260059390931b850182019282810191508984111561365457600080fd5b948201945b838610156136795761366a8661315e565b82529482019490820190613659565b9650508601359250508082111561368f57600080fd5b5061369c858286016134c0565b9150509250929050565b600081518084526020808501945080840160005b838110156136d6578151875295820195908201906001016136ba565b509495945050505050565b6020815260006105e860208301846136a6565b6020808252825182820181905260009190848201906040850190845b8181101561374257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613710565b50909695505050505050565b6000806040838503121561376157600080fd5b61376a8361315e565b91506020830135801515811461377f57600080fd5b809150509250929050565b6000806040838503121561379d57600080fd5b823591506137ad6020840161315e565b90509250929050565b600080600080600080600060e0888a0312156137d157600080fd5b873567ffffffffffffffff808211156137e957600080fd5b6137f58b838c0161327d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a013591508082111561382e57600080fd5b5061383b8a828b0161327d565b91505092959891949750929550565b6000806040838503121561385d57600080fd5b6138668361315e565b91506137ad6020840161315e565b600080600080600060a0868803121561388c57600080fd5b6138958661315e565b94506138a36020870161315e565b93506040860135925060608601359150608086013567ffffffffffffffff8111156138cd57600080fd5b6135ce8882890161327d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561391a5761391a6138d9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613957576139576138d9565b500290565b6000821982111561396f5761396f6138d9565b500190565b6000826139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c908216806139c357607f821691505b6020821081036139fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008151613a148185602086016133f8565b9290920192915050565b600080845481600182811c915080831680613a3a57607f831692505b60208084108203613a72577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015613a865760018114613ab557613ae2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650613ae2565b60008b81526020902060005b86811015613ada5781548b820152908501908301613ac1565b505084890196505b505050505050613af28185613a02565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008951613b3c818460208e016133f8565b91909101978852506020870195909552604086019390935260608086019290925260808501521b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a083015260b482015260d401919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152613c0b60a0830184613424565b979650505050505050565b600060208284031215613c2857600080fd5b81516131fc816131b1565b600060033d1115611ae25760046000803e5060005160e01c90565b600060443d1015613c5c5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613caa57505050505090565b8285019150815181811115613cc25750505050505090565b843d8701016020828501011115613cdc5750505050505090565b613ceb60208286010187613232565b509095945050505050565b604081526000613d0960408301856136a6565b8281036020840152613af281856136a6565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152613d5460a08301866136a6565b8281036060840152613d6681866136a6565b90508281036080840152613d7a8185613424565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220228873a1dbc927460298fd5cf17cec7d54fd264b083c870a64dcb7e8fe68add764736f6c634300080d0033"; + "0x60806040523480156200001157600080fd5b5061843d80620000226000396000f3fe60806040526004361061018a5760003560e01c80636787d449116100d6578063b3a721d11161007f578063e751c98111610059578063e751c9811461060a578063e985e9c514610647578063f242432a146106845761018a565b8063b3a721d114610565578063bc01188e146105a2578063bd85b039146105cd5761018a565b806385bff2e7116100b057806385bff2e7146104c25780638b349f3e146104ff578063a22cb4651461053c5761018a565b80636787d449146104125780636dcfd841146104555780637cafe690146104925761018a565b806318160ddd11610138578063481c6a7511610112578063481c6a751461036d5780634e1273f414610398578063572b6c05146103d55761018a565b806318160ddd146102dc5780631b023947146103075780632eb2c2d6146103445761018a565b80630b885ac3116101695780630b885ac3146102395780630e89341c1461026257806313ba55df1461029f5761018a565b8062fdd58e1461018f57806301ffc9a7146101cc57806308dc9f4214610209575b600080fd5b34801561019b57600080fd5b506101b660048036038101906101b19190615fda565b6106ad565b6040516101c39190616029565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee919061609c565b6106c1565b60405161020091906160e4565b60405180910390f35b610223600480360381019061021e9190616245565b6106e4565b60405161023091906160e4565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190616355565b610aef565b005b34801561026e57600080fd5b50610289600480360381019061028491906163ec565b61103f565b60405161029691906164a1565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906163ec565b6112ee565b6040516102d39190616029565b60405180910390f35b3480156102e857600080fd5b506102f1611300565b6040516102fe9190616029565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906164c3565b61139e565b60405161033b9190616029565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906165b8565b61147b565b005b34801561037957600080fd5b5061038261150f565b60405161038f9190616696565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190616774565b6115c6565b6040516103cc91906168aa565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906164c3565b6117ba565b60405161040991906160e4565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906163ec565b6118a1565b60405161044c97969594939291906168cc565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906163ec565b611afc565b60405161048991906169f9565b60405180910390f35b6104ac60048036038101906104a79190616a76565b611b0e565b6040516104b991906160e4565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906164c3565b612050565b6040516104f691906168aa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190616af2565b612062565b6040516105339190616029565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190616b5e565b612238565b005b34801561057157600080fd5b5061058c60048036038101906105879190616af2565b6123ac565b6040516105999190616029565b60405180910390f35b3480156105ae57600080fd5b506105b76125f3565b6040516105c49190616696565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906163ec565b6126aa565b6040516106019190616029565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190616b9e565b6126bc565b60405161063e9190616029565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190616c78565b6132b8565b60405161067b91906160e4565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190616cb8565b613355565b005b60006106b983836133e9565b905092915050565b60006106dd826106cf6134bb565b6134e890919063ffffffff16565b9050919050565b60006107127f69504125a65169bd9ace52315659eeee937ddd4bdf618acb15b713c78401f4c660001b613553565b61073e7faccfc096572c7e3ed3d231dedc6edbc08a8ee7083c56c5fd017fabaf408f082460001b613553565b61076a7f0412321e6c9f536996f3f40453a005c4a3083c4f9eec273735177ceb17b6140560001b613553565b6000610774613556565b90506107a27ff8a6a702a83871e3f896c8eefc0893b7963981937e76884b4f11c7fb499f3b4760001b613553565b6107ce7f02b993527cae523365a22f9447d194978d7ac0f3027271eb30eba924a9a8b00460001b613553565b60006108346107db6136f2565b600101600088815260200190815260200160002060070160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b90506108627f46cd84591a45d31f4753b1f27eada9b11731243cfee8d0e487bb9af6ca20184160001b613553565b61088e7f9d81882fab1e488e996969ec23d09cb97622605bb4d508942af0117cabd1b20b60001b613553565b6000868684846040516020016108a79493929190616db8565b60405160208183030381529060405290506108e47f14a417097b723638a61d8ae753622c1a23209652bf53c528647ca4fbbbd8d17e60001b613553565b6109107f036e543f4b650565194810827e1fc02784e8df335cdac436aee78be36726a56a60001b613553565b60006109348661092684805190602001206137de565b61380e90919063ffffffff16565b90506109627f5b07bba82364645d0d258d29b0de5613380bf36abc1216f1412b2bc393ade5c660001b613553565b61098e7fe169306b6ec3dbbdc82a15559d389711c2171fbc553cc50e407c2e22ced0863260001b613553565b6109ba7fa2f66755fcdc1651ea119ea6965a4a2a02fed2ed5b54717e112662b0c39e7caa60001b613553565b6109c2613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90616e52565b60405180910390fd5b610a7f7f9b3a9722eff62304e4422ed0f66887e99a718588c3a44bbabb55d5595f05160760001b613553565b610aab7f11e03f72ffc8988cbdb454ed20e69f714fed69060ed900ee7e2c7e94ae52dcc060001b613553565b610ad77f2c4240edf1288e6ac4b00dbcf5088b9764c0fde3fbac31357ddb1ea812fd025360001b613553565b610ae2888886613913565b9450505050509392505050565b610b1b7f1e4f3db61d02d43f745245c64298d7f0c1a3e8708559b6670d4ca42c54514f4460001b614280565b610b477f0ac4986fe6d4c3895c8ef5e03bf2b121d82e6cf32614c4c5189671928b98f8e360001b614280565b610b737f145960e0b8e54656e42c3b088b3a10b57bf051eb1c4bb726aa3f9ccfaa056f1c60001b614280565b610b9f7f901a5d83ad9e5900a26fb984a5a99dc96974734dd64371311e5ca412033f4aa560001b614280565b3373ffffffffffffffffffffffffffffffffffffffff16610bbe614283565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90616ebe565b60405180910390fd5b610c647fb7cd82f2e96c1e329917e6a6f329bab37f4868e3a34f88a3ae05f88fe1899b6e60001b614280565b610c907fb5ae9824ef1c4b9d1c19baecf68dbac5d61b7d6069bf88af80ad92642241b4d260001b614280565b610cbc7ff115cefef55a500dd4e6296e9a3d6cc0e8dc3d6712feb6c7f9f051ca69614aa860001b614280565b82610cc5614361565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d327fd72402da254f9ba5a463e2015cebe357527e12a62cd25ecae2e2921778ddc3cb60001b614280565b610d5e7f543c25cfe85aa6f8c53e60eaa7f95103d121790ecad586cf733b8a8818b76f7960001b614280565b6001610d68614283565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610e1d7f18d24b611c0380c8df6354eea02a5a82d3b36fea45384921c977b440fbbeae9f60001b614280565b610e497fe0a44e89e5938bc342f25b353520510937291eb9dcca1342977aa3ec3eda8fc060001b614280565b610e528561443f565b610e7e7fc7c1929af15c5b3153f6eeb8ca93a8874a8cc881a6d885786447b173c210d63460001b614280565b610eaa7f720f9f9246e75a85b11fea637347797614847368b50cbf3d6962eb4bff9a58bf60001b614280565b83610eb3613835565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f207f42fa96a8febb97c55f95796d3fb0d21c410d5ab5adf4ace2d87a196cc4dc3f9760001b614280565b610f4c7fd44b3d45ab725ff9a331429e51865d518e4343c4f6bcdfeeca70765aa2ee70eb60001b614280565b81610f55613835565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc27f1eb6094a4ff364bc1205590533550d7e1d18bb4fc33971eb49a6c38f5c349b1d60001b614280565b610fee7fd671a9abc380ff64132a5a282180f649887bc6379ff36cf2c62463e383d3749b60001b614280565b80610ff7613835565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606061106d7f1c3b8ce455b2ad4634a6bde830f371ccaa9a60a47f7530d5559c60059ac6796360001b6144e6565b6110997f744faa1a7f641981fd5340120b41026f6255d60e762e83a56d1f5e25ace615c060001b6144e6565b6110c57f7ddf9d337eeac748c812ff0c191bca0bd9ad27c607ff6276c26efb1d10350ff960001b6144e6565b60006110cf6144e9565b600001600084815260200190815260200160002080546110ee90616f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90616f0d565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905061119a7f31479a340477a3cd3ddd8874968c9b56fbb69a24bd62655bb14254f5e8b6b66f60001b6144e6565b6111c67fb07081f26262d7615671a199ff1ec98be27284b5bbb83db432041ec57553afce60001b6144e6565b6111f27f6f3823429822313601553d8d17013e3cb264da9b810dc4d78587e834dde5ca1060001b6144e6565b6000815103611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90616f8a565b60405180910390fd5b6112627f0758b40c742a6fadcdad3a342e6f0185a043afcf936f6a1f430cfe0a2895409f60001b6144e6565b61128e7fd00b5f2990c6e433c54a778edb076d4dd783ae43a208d2bd579c3e8b8fec22ff60001b6144e6565b6112ba7fac6e807513b0bd038c04f48a60fcaa1ca589bda2965c00a45f99327340337f7060001b6144e6565b6112c26144e9565b600101816040516020016112d792919061707a565b604051602081830303815290604052915050919050565b60006112f9826145c7565b9050919050565b600061132e7fa33d91318f77fb95d2fe4386c2678c14692f4adf788a72bcf2e6161f1537a0df60001b614280565b61135a7f261f9308b795e5a1107f3e9f410b1729e5552cbec6ef68eb8baeb4101526ac8160001b614280565b6113867fc3b939dd6c5215c8cbeda83887c1c350b1860f6de8924882ae7d062b377db98860001b614280565b611399611391613835565b6002016137d0565b905090565b60006113cc7fae1f162029218081da04bc8ad4cc45c451cdd486a41807dfddaa697cdb51db7760001b614280565b6113f87fec18d1e30aaf675a2d5fed1149a973e710441a8383555ea0ffb7ee515f1cd24660001b614280565b6114247f5fad527e5d3d69e8dc7332a6976fecc95c52e88dffc8d20b259e135cb58c4bf660001b614280565b61147461142f613835565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bb57506114ba85336132b8565b5b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190617110565b60405180910390fd5b6115083386868686866145f4565b5050505050565b600061153d7f340aa1274e9ed6d73309ff2182f3df83aa741ede424aa35a2849a2c2144894d360001b614280565b6115697f21d1933df3a4a8fa207ebb584b97eb52ab398c4a1cfec85eb03e5f5f6d1ccf5e60001b614280565b6115957fa7c174764dca473b275d9b1190c3b7f15c9dd7d692ab10c1b9267a4fc13a517b60001b614280565b61159d613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906171a2565b60405180910390fd5b6000611616614618565b60000190506000845167ffffffffffffffff8111156116385761163761611a565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b85518110156117ae57600073ffffffffffffffffffffffffffffffffffffffff168682815181106116a05761169f6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590617263565b60405180910390fd5b826000868381518110611714576117136171c2565b5b60200260200101518152602001908152602001600020600087838151811061173f5761173e6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611795576117946171c2565b5b602002602001018181525050808060010191505061166c565b50809250505092915050565b60006117e87fc51b1a04fdf35d4961d655a2e9df2e144166121cdbbd5fcebcda1d4fb6b4afd760001b614645565b6118147f160a64ca27fca7833fe2c155dbc48620377746ad27e180a793134a8b523ea11160001b614645565b6118407ff7ead2e2d6d8c6b4cb4e64bda1cd535361e99fb0ae87d56950d3fc237d1c83e760001b614645565b611848614361565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008060008060006118d87f465fa96a026591afcc73eedf68b5c234111d787bdef224abefbea5f24a6304f660001b613553565b6119047f1a2d192b6ae8580c21449edc18a5c5189abd26b541b43023a7c74f72a23c7be160001b613553565b6119307fcd678e9c959426ff304e44b1af5415d33309a2109427d6ac8491e166b7cb976860001b613553565b600061193a6136f2565b60010160008a8152602001908152602001600020905061197c7fa4b18d81fa899abf513b4e95a051fcd93b2e51d2ed12e1653a1014ce1c00c26460001b613553565b6119a87f83f8325adf643554750cc9e87bae0a5049ec04d2429bacf59c3f9b1108b6884b60001b613553565b6119d47fa4cf44de82e0fd6de50eb99a5e6c9948927be4018461e0737f597b075268826960001b613553565b6000816003015403611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a12906172cf565b60405180910390fd5b611a477f90f8613cbb087340bcca2584e180c5bb0e2901934a061edf860c6dd48c6e76fc60001b613553565b611a737f6ababc2cd4db007b37cf61708a8c9bf1d76d283de7b4eee8b3ed1ced58be40cf60001b613553565b611a9f7f204e74a6d17e8e13984367216650a7a0fe40d524672370a1fa43770fa3b43bcc60001b613553565b806000015481600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060154975097509750975097509750975050919395979092949650565b6060611b0782614648565b9050919050565b6000611b3c7ff24834d51a1c359dacb2d97c14e2fcffc7464051ec52e708ad5863881d6f35da60001b613553565b611b687f7669ffee594535e6f33a4689f9303c5b0be52f7684b56230d794f5750bf5994960001b613553565b611b947ff79b90c16015f799c056f5ef78549f157c8d9c905ffb99eb847d6072ede6f2e460001b613553565b611bc07feb4ed2cbd35ed9850baae47a508cba57a82490d1bb12ebd37e0f3c36f128f31760001b613553565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c259061733b565b60405180910390fd5b611c5a7f7b03635d50a2ac6a2176f76edc64adf6be2cf6903326ad1b85fa61c9d7bf0af260001b613553565b611c867f4e6fc0202bd1107ef1dd2be5a6683c8d6936d2d1c9fec2a089f5d8b8dc92407f60001b613553565b611cb27f9ffb1814439e241f271bc61198718d53cd81db521ea4b918e03143e1aaa2711860001b613553565b611cde7fb8c98bda67af8c290643ba4efdae96f986c3aaec8665c4a5f692f7be2be7fbb360001b613553565b611d0a7f0928c4062428db501eb41553c8d2b14b4940048b02c8701abf121fd545d7238860001b613553565b6000611d14613556565b9050611d427f15b143cbdb1ab87d35daa7e35136263eff53fba20d7c7bb58ba41d93c564cd2e60001b613553565b611d6e7f19a3e3512e07676e18e589506dc158d80b5d7cb3beac1bd9433961c241f15ed260001b613553565b6000611d7d8686905083612062565b9050611dab7f3cdc773ec7a0bbfac9bb175b96dac685fe84427e3e8817908be364e7e19d958e60001b613553565b611dd77f898fd03dc07b76f3fb4a9ad96a6d4ae4938ee88b1b9ae0d839c6fb75851d487160001b613553565b6000868684604051602001611dee939291906173c7565b6040516020818303038152906040529050611e2b7ffa2d084e5aa3bb9d552106093bb156ed767efd13d4ef769f45a1c608608db9ad60001b613553565b611e577fb4adb993f0112309e0dda211c3c872be6fc1e8e1e24c2737bcca45864f4992fc60001b613553565b6000611e7b86611e6d84805190602001206137de565b61380e90919063ffffffff16565b9050611ea97f3385f8936d3613b10a69cd465c8105b4160dd4bb6150da1a8c527fa7bed06c7360001b613553565b611ed57fbedc4adb23e940e294388ee7224af083de5e3284529ef41d6ce9930033a07b5e60001b613553565b611f017fcaf9c7508b1d2979a5c86ba62715d43dcc60bf70be5b83327aaf3f862ff5513860001b613553565b611f09613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190616e52565b60405180910390fd5b611fc67f07a7bc365223ab36c77a4a9ea8ebe4b7b8d6231b8ae915ebad4c2f50b2f3d57260001b613553565b611ff27fe7ee1b5bed08b17973242e0848405f3c04f580944813fdbecff270770eb7d18260001b613553565b61201e7f94f361318dbc2681bc9996f924781ee86ece31f3436523b550f4d04cf3874fe660001b613553565b612043888885818110612034576120336171c2565b5b90506020020135600186613913565b9450505050509392505050565b606061205b8261474a565b9050919050565b60006120907f60765bedd401bd9b58bfa600b58a3868c5af8544f7e462831178bd883d38117860001b613553565b6120bc7f2b6a4ce8c1966ea92df90f6cbae66e288ec6448dc56286facce3dfeb13821f2960001b613553565b6120e87f1389e418c0a511e7e3eaa43e4d94e098cb9c042c036c05bc4d684f5125db491d60001b613553565b600042836040516020016120fc91906173f1565b6040516020818303038152906040528051906020012060001c61211f919061746a565b424160405160200161213191906174d6565b6040516020818303038152906040528051906020012060001c612154919061746a565b4345444261216291906174f1565b61216c91906174f1565b61217691906174f1565b61218091906174f1565b61218a91906174f1565b60405160200161219a9190617547565b6040516020818303038152906040528051906020012060001c90506121e17f5b21c6f2374698176296dfe2a8445e7fce913edb407c39cc7d5abab4c5d15b3e60001b613553565b61220d7f3d73192fe1bf95af8a0c91385764162dd6e965f6a777b8de1bd879bdf7de096060001b613553565b83848261221a919061746a565b6122249190617562565b8161222f91906175bc565b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90617662565b60405180910390fd5b806122af614618565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a091906160e4565b60405180910390a35050565b60006123da7f8de92a92eb4f534db65b0725a8a299eb59aca6138bd32c120bbb7dd57a3ab30960001b613553565b6124067fe613f2110dcf45672ce7ada28d0addc56fe733cc274f376124ed0fab09168f7960001b613553565b6124327f4b32fe64b1f0597ff9d8f100de6695d3b21da2485df357cdfa7c687dd882b1cb60001b613553565b600061243c6136f2565b6001016000858152602001908152602001600020905061247e7f333e5fe9b82539e577e6711e227ffb85f984985603e2dcd3b310181f1bcb4ea860001b613553565b6124aa7f2f8b9bc4af379bc9da65e0359701c93e42ca912183d8cfae8427a5607a2cac2b60001b613553565b6124d67f455c527fdc00c09c1476f596faf29cdbf259272fb5eb7bf373b98b5899d2f43260001b613553565b600081600301540361251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906172cf565b60405180910390fd5b6125497f3e6a4520705047fd60862a3b73db1fb921ab171e642d1ddafaccea0294370d6860001b613553565b6125757f43e347200895dc09f6b125f52292b2bbab2f2545f9cc7bc4d8c09c40219efcc760001b613553565b6125a17f9b4beade9509f38d5ffce5a7d5b78ca2a1e8ae892073a7b364f0e4841c25151a60001b613553565b6125ea8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b91505092915050565b60006126217f0619baf6ca8789a3e86f4aff6d89e719238ed3e720a6993e0accc89ca92b9d4860001b614280565b61264d7fdf5461867b8a8bd8fb4f7803cb9c246a7892adc5b2b475b1f75dba51b2182f7a60001b614280565b6126797faca8ec6ded37615fcf2cd5aa4063085146ed390b11503d1b7d2ea113fb25dd7660001b614280565b612681613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006126b58261484a565b9050919050565b60006126ea7f720938f99de2f11f86876804fff7292696d42b75131e9bac80c0a95c8e5a279060001b613553565b6127167fd806a38c7b5d62d6af24a70340f4e595ddc4623ea115bdb799dfe0d0bacb787160001b613553565b6127427f82e12f199f839c376058aa1ecc504c862f1e16b6ed3bd1b912be770073b6e20060001b613553565b61276e7f5df9890c32153a31c3071d9dc69e4ebe97acca3f7f7ef3e3f74d36b2a88bdef460001b613553565b6000878761277c91906175bc565b116127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906176ce565b60405180910390fd5b6127e87f0492531b4255db2bc8189f4589d26e800181076ba492c838b5ab11e715f2847f60001b613553565b6128147f6e5ae7c332c217ef76c88e8a3a828bedadc25fca4cd857c39daa1789d642e76460001b613553565b6128407fc14eca242eab0aa946075f409d9b8d9698598cf1acd8ae3f19d116a458ccca1f60001b613553565b61286c7f83f27d511f4a33dee6c8cbf58233412fc09cdf67ecf721d46504f311343567c460001b613553565b60648311156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a79061773a565b60405180910390fd5b6128dc7f159c847be75e9bd093bc13b4b6d370fecb5aa1579b8517b2c7e1cc9ad418293460001b613553565b6129087f25bb89bd30e8a1744b71ff33f22a31cc94de7bfaf120ff91eeeac9303ffb834b60001b613553565b6129347f1218d8f17309fb2483a89e7b7e97bfbcc02a3120794538df2dcbd723b527d66960001b613553565b6129607f32b4d025bdd90830de6a84d51a47fe77e74982bfdf3a2749f8a7a613dc06e37260001b613553565b600084116129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a906177a6565b60405180910390fd5b6129cf7f8285f477a723c9b64cfb7be4086753679ac95943cd4466441515be3486e8c53560001b613553565b6129fb7fcba34dcae13ecb803751a3823d65df04bb6dfdd36c62e9dc8019dd46a65bb7ed60001b613553565b612a277f751669b10886962e6900a9e69ce28663127762edbb446168c614741dc82ec4e060001b613553565b6000612a31613835565b9050612a5f7f8a14962ce2b3a5ce0d0137f7e30711ce4290c774a0ca46fa695933ee82d7ae1e60001b613553565b612a8b7fbbe952a07f813f8f03a63cfc960e05d3ba7b1eb47f08549e6cdff14eb60d4d1260001b613553565b6000612a95613556565b9050612ac37f54d3bc4c862888cb85715327572df775563a8a2d4adbe5599357afe9d87ca68460001b613553565b612aef7f2248fee24ebe4d855f90fdd22a450262412705d7526f17a5347c7f629cbc522760001b613553565b6000612afa8261139e565b9050612b287f4c42dfd24abad1c05a3f4f70b7946f0692bee8150918e59af57f0b3db5a6da4d60001b613553565b612b547ff913260939086e368089a839e0841d58895284bb43e1bbac925230740aa0334860001b613553565b60008b8b8b8b8b8b8888604051602001612b759897969594939291906177c6565b6040516020818303038152906040529050612bb27f4d2e27de565216e905e62ac14a701f0ebefa2898551ae6dd80ec8b39a1b073c960001b613553565b612bde7f357fc6ce39641fa002b9859340974f193937eec06e410b560ea8c55f9848b09d60001b613553565b6000612c0287612bf484805190602001206137de565b61380e90919063ffffffff16565b9050612c307f2b8bf47f9dd9ebf95a30441a56580e8c6cdd7a976113a0740a484f69a9f9a51f60001b613553565b612c5c7f7851e13dec3d128dcfdeeb450c4a98237c728693168cb2c30003cf2c555b722860001b613553565b612c887f6d62bde961a1df0136651e214e015a645c511ff369879102410ff00a635cc07a60001b613553565b8460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190616e52565b60405180910390fd5b612d467f7a6ac0a8027b1e93edac2ab8901c948f0e5517215e93b27144e72eb8dc10f06960001b613553565b612d727fe4aa691889ee30419eaeef0947141197b9fc44914eb9e0c9fec36bca603cf86960001b613553565b612d9e7f9d0520a90711ce6b354183a30cfb75a12d13ae3461231704edfcf5d387938f6160001b613553565b612daa856002016137d0565b9550612dd87ffc0c07e3520f96cfbe67b70729c3659036168bae15e56a7faeceb26da24d5dbb60001b613553565b612e047f5959b06c459141c8df2d02d9795dcb8305b253b4cbf36ff3f46c5854ad9e8d7160001b613553565b612e0e868e614870565b612e3a7f4a2a90ed8fd29ea0a282c73c2f1ab1a7b4ac5c3728df33028bb4ec6d7d653f6c60001b613553565b612e667f89952afdbe3ae446eabfd7530b5468afe7226c2f4d9f18bc9b77cbee2ea0a11f60001b613553565b612e7285600201614929565b612e9e7f10a46dfdbae3dd49d7a950ff9e6b688651f17200627cad1639593ee54228315e60001b613553565b612eca7f14c07fdaaadb84d75015844b053d5c42596ba04d5ef5314dc4b439e77d7a8d4160001b613553565b612f138560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b612f3f7ff4e567e7562911da39bffb81e288c8f975e497cd7150fccc6a2a2c68b5b9dafc60001b613553565b612f6b7ff8a191528b6fbe90d3cd26e4f22be7d31c75c8daab9998f0edb1d5b3d76bffba60001b613553565b6000612f756136f2565b60010160008881526020019081526020016000209050612fb77f640f3e9b22ce366c014d00c51198c0de837fcf06eb277dbe91c84f5a39727d5d60001b613553565b612fe37ff2a398dec87ced93ae3cbba671a8c4ce313b9d755fd551aade15e3a16e1e6ecb60001b613553565b8c81600001819055506130187f33e7fa782ec497815c75df409203e9e3a69200f4e1fa55b64da4d0f264f3dffb60001b613553565b6130447f603f4be081dabe4238dd480b37be18ef710d8e18c3469e52c0a6ddab00a8a61c60001b613553565b8b81600101819055506130797fbf288863ca6fddd32e879f4b79bd4dd425c392a5fcef5f983f8f08e1ef605b5060001b613553565b6130a57ff2a177ad06ef67b9717f15fcf34cc70f340b3cc6d6f14bb593e821bf9b06501160001b613553565b8a81600201819055506130da7ffcd4deeacae774eaeb62042d1a9e4b0cec53e040646d9619f79593144a07591d60001b613553565b6131067fd0eb1c6e1a157f4ecce99b20ed040702d0b4fd4b8cb95fb2fea84c089bfe3ea560001b613553565b89816003018190555061313b7fcfe1f9dd13cf2d9b481193f3cc530b6b1a8de05ccdd7d3924422faca7f18186260001b613553565b6131677fe545a543d3c586e2ab33ab06aa56cd973639d8eb2c241a55718cc08e064a9ea460001b613553565b88816004018190555061319c7f432f09bf2bbb2cfa048f0ac7c4f99231c483765887abc3c25dad6772b7f01b6d60001b613553565b6131c87fcb43f8134b94ad527bea6b907ab1a5290e282ab5ddd2a6f18f172b4d5f36e2a260001b613553565b848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132377f14faaeb3648c1d505407846e7c6b7679b19e9b2dc90e1d9097c5e2ae73aec88060001b613553565b6132637f60fcde9fb8e94a807ecff08d1f13c7c512e0331b52f71232068523e29dcab0bc60001b613553565b868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b60006132c2614618565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613395575061339485336132b8565b5b6133d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cb90617110565b60405180910390fd5b6133e233868686868661493f565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613450906178c6565b60405180910390fd5b613461614618565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b50565b60006135847f0fabcbadc4a10086619fdc1814df79dd4a107858f209f6d947174c48415bc30e60001b614645565b6135b07ff97eaa9356f2efcb5cb2effd46690d592ef2728f57d91a5d700a0e7160a8610f60001b614645565b6135dc7f91a20df0ed4ea76380ecab21b298646da37e59f23eabc0cba603b696f95fc95260001b614645565b60186000369050101580156135f657506135f5336117ba565b5b15613662576136277f9ce1aee594fa4a6ffea26291bd008baa8acfcecc91d62a5d1ad6f3dc69f1ae6860001b614645565b6136537f50849634e83f066fd0501cde170910f86107f0b23bd24d8ce1e297ffe212663960001b614645565b601436033560601c90506136ee565b61368e7fe0cdb04f9080e90b216f114284e970caeb1e86018be111e6ac076ec090965af160001b614645565b6136ba7fca7dcfacd32360eedca4bf35c474c6d2fe16fc049ebbc937fa5eb0cc2c64408560001b614645565b6136e67fcb673a6e911fca4f124234d139cf95e7fdec288e65dee5432335cf18e818103060001b614645565b3390506136ef565b5b90565b60006137207f5ce04ef2e9f839031f089bd076ce06e9b896a48675dc51b63cb4955c3d885e1e60001b614963565b61374c7fb5b59fb0f64986a01f06090b75f111e3919ff48e63ec85a92653657f361588ad60001b614963565b6137787f0e132ebeed99e77224bc55e57d440fd757f061699bad2ef5eff0f181fc8c93c760001b614963565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506137c97f457b16e77325cb925460189c13afe8380ab16f405ec2ae94094a29ef747143d260001b614963565b8091505090565b600081600001549050919050565b6000816040516020016137f1919061795d565b604051602081830303815290604052805190602001209050919050565b600080600061381d8585614966565b9150915061382a816149e7565b819250505092915050565b60006138637f621434c9fd2e8bba0ec1e8665c6852f4a9919372e89bb045ed4a46aee0a51fe460001b614bb3565b61388f7f563cb72bde513957c46c4fa0753bb9816050c133ed604584517c0f39a73e4eed60001b614bb3565b6138bb7f7f53722e1ed3903aa24ee1e622ad9a65b4217ee614f3685b860a52a8be9fc95760001b614bb3565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061390c7f3e1bdcbbbb16eabd821040291754918d2051e700c9a0133e121019f9de911ecd60001b614bb3565b8091505090565b60006139417f72efb1d40a976cae6eeae9e878b7b30d9a49a5cdd1ab47a739590880a294cec460001b613553565b61396d7fcf169b6a538dc0f6c0102feed0b37c54f672f3e681b5269dc99961f7c9801c3160001b613553565b6139997f2725c06dd82edbad3f9b872af6a16699bd282780be9bd922071dcbfbc52d295d60001b613553565b60006139a36136f2565b600101600086815260200190815260200160002090506139e57fed84f1a88251221452e61da921c1b9d7ed5b46b3d7f38adc2124217f80b4c05760001b613553565b613a117fa02fa8de6f13ca3baee48e7c621a464e34de7768755a1eba6dbb3f1e786891ce60001b613553565b613a3d7f9b07797a0047f1a2b2e4b7a9979a95d9fbb015f879b00e6d4a4a29469d3c58a560001b613553565b8381600601548260030154613a5291906175bc565b1015613a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8a906179cf565b60405180910390fd5b613abf7fcb40fa9eaab8061dabc4c511b9a94536ef501a174ee019c004a607ae8995185260001b613553565b613aeb7f66645bdcce296b125239319745699d993d6c819d43cdba8b5590e076b35817d260001b613553565b613b177f3814e112ad9231e1448ae67c1ba054d8935915728027d055249ab3a2874aa50d60001b613553565b613b437fc359b819cbf6abc9ffff042968bc9144b1b770bb16b8bb72111bcdd780cab06260001b613553565b806000015442118015613b5a575080600101544211155b613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090617a3b565b60405180910390fd5b613bc57fd294e1e74386a0df78f440313618ed73a03640b6d18e09da6f8c2131ad6384ff60001b613553565b613bf17f6f3a1b072b7cbcf96b8f486bc4f40e0a89db93f534dfcdc169a1900be3f4a1bb60001b613553565b613c1d7f2f1086299e035b64320074596a23768d4815ee96be84e80201eaeeb3188328a860001b613553565b613c497ffcc15ab5433ff92b3f86fbd6208ea4fd592f1d4ba1924a0902df190106170c0b60001b613553565b838160020154613c599190617562565b3414613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190617aa7565b60405180910390fd5b613cc67fec7aa35ac4c5d18865f9724057d532be47be3a3abfea493997833eb77ee599ba60001b613553565b613cf27fa81469beb7e3ae07c5eaf3902ff05920d276e1048c7d7e79678047abc5b2acdd60001b613553565b613d1e7fb5580bda63201eef46e1894f3354ae8234048c14ff0ab480eec3f030a4acbb6660001b613553565b83816006016000828254613d3291906174f1565b92505081905550613d657fd52882e36a1ad9ab5b750c4e7d191b0f1a855d2822c7a8070536389830309cdc60001b613553565b613d917fdfa403db413f5fba67cca52f1fb76479f1fd13a498328f86d6d0336db0ddfea760001b613553565b613dda8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b613e067f9e3bf88b4b5b6e504bc0b1b1310177ddc269a736f56bf73cc454088a54cb652460001b613553565b613e327fdb225c249b2e49c927b2a9d5ec1e9df5d04653a4e58125e4c69a75d46d4eab2b60001b613553565b613e4d83868660405180602001604052806000815250614bb6565b613e797f733caed6c410a8451c0bdd5a388c38a8bb22d226a1d58d6b2ad3be0f405d28fe60001b613553565b613ea57fc23e2a994cddb2835043be74384867ad8dd5eeea927ea7e5180208f983a9b29460001b613553565b60008160020154111561415257613ede7fc47bae03022c822ca2c6d9ca6d452c01eee2598acd60dbd76dd5ade7f00d37f660001b613553565b613f0a7fb71ae19af149b322d2bf51ad08027d1f67e589ddf89b71ed620aa0dd59aceb7660001b613553565b613f367f0457c7f73790240af84972ff8a82b68559af57f3f8a9dbf5c2e53ed03dd2907260001b613553565b60006064826004015434613f4a9190617562565b613f54919061746a565b9050613f827feec6d14385b21131966c80c452d808575f399b22e069110a60e09be7fb4a07a760001b613553565b613fae7f5d7cf90e8b67ffda5c86f2490eff2429c07d179d3d4a0d21e8b92d0b7a479a0260001b613553565b60008134613fbc91906175bc565b9050613fea7fb3513e574992c008466e9b30a8a6dcc4050e1570090ce65a8455b3c0117fdd5660001b613553565b6140167f68b96afc572ef1dfd8edba56f833f5841092fce6210d283eac03413c8df37aea60001b613553565b8260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614080573d6000803e3d6000fd5b506140ad7fbfa50c3de55e4441031b004d9472d9f431265501bc9cc2701ae2de73c8c020fd60001b613553565b6140d97fdfbe64df54971a58fd9cf29bf8da9241ca863845e2377fd7b88f8a19132d86db60001b613553565b6140e1613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561414a573d6000803e3d6000fd5b50505061417f565b61417e7fb45b90fd42a7ff2d68678a574cbec27dad17991519a6567b045aa604418423b660001b613553565b5b6141ab7f0d031380eb99469c9a9b657726f4b0b7eb51c1c9c87aa69acb27c14d86b44bf560001b613553565b6141d77f1de7d8267f4f82897b0b046701c263241bf2e099fd317b8e91e44fec0627fd1760001b613553565b83858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142487f12fcb7150f41d198cc560721d9fe4a8b9b9675b3c97296f71de583b19f20905f60001b613553565b6142747f51c910e3280240a9da13a26a918f1bdee1b640ef3f81c307a8181a8b85b8b51c60001b613553565b60019150509392505050565b50565b60006142b17f37178690aaa1dfd0c6c3d44a41adbe336ddf4e47b2b013705f748d17f953a4f960001b614bd7565b6142dd7fb61c1cab06bcac74cb6fcec39279be9822daecce53b0d226a7f55aaa4694a84160001b614bd7565b6143097f390cbf5b98e53b9eb14b6ef693414cb3bd075af27cf444b8236e59e0e311394260001b614bd7565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905061435a7f2e97ffd5dadbc67c0d3ba2581f455f642621064ef90f5a7cfc10aed47737e18660001b614bd7565b8091505090565b600061438f7fc12b04ea53e4473ef466818b7c8c94c90f6bd77205d7c9b82f6a5d4de196a6a960001b614bda565b6143bb7f89a1f54751c7a873ff3e8896571a78db56811d12ddf8d5d28efd5aa5386e903760001b614bda565b6143e77fdedee73f76c7a07a4b418b59e38145ca6423d0815832d433528f8a1d7b01551a60001b614bda565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390506144387f47b0161d8c57ec0e65647be2a620071b1a78d3a9606f10c9cd43c92ffe7741da60001b614bda565b8091505090565b61446b7f431bc7f452809a3732c5c1a0b6c51dcd24cd363bf1f82908d52d72546076378460001b6144e6565b6144977f52240686f143432fc52d707de7b9ed833ae7ca5093172522026947ac54409f8760001b6144e6565b6144c37f7327e968d0500ce8cdfbfe0fdf076e04cd8669b4e88c690338cd4426d8446aba60001b6144e6565b806144cc6144e9565b60010190805190602001906144e2929190615e8f565b5050565b50565b60006145177fa9f6d638cb34cb261597ae232ca47e1e05373b83d270d71d783851218479d26560001b614bdd565b6145437fb459fc962a4b7a702eeba11b454e002d1e5fe7f2f71ac0249e476d78be45e16e60001b614bdd565b61456f7f373e0f10c4bbfcba941e9d7478208b12b2e79e04105738322bffaa27a05a837260001b614bdd565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390506145c07f3b7a75e893a3d4e113ca24a01863558add93663b17f32ee1a0d99b5a4d4f7c1060001b614bdd565b8091505090565b60006145ed6145d4614be0565b6001016000848152602001908152602001600020614c0d565b9050919050565b614602868686868686614c22565b614610868686868686614f27565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b50565b60606000614654614be0565b60010160008481526020019081526020016000209050600061467582614c0d565b67ffffffffffffffff81111561468e5761468d61611a565b5b6040519080825280602002602001820160405280156146bc5781602001602082028036833780820191505090505b50905060005b6146cb83614c0d565b81101561473f576146e581846150fe90919063ffffffff16565b8282815181106146f8576146f76171c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506146c2565b508092505050919050565b60606000614756614be0565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006147a382615118565b67ffffffffffffffff8111156147bc576147bb61611a565b5b6040519080825280602002602001820160405280156147ea5781602001602082028036833780820191505090505b50905060005b6147f983615118565b81101561483f57614813818461512d90919063ffffffff16565b828281518110614826576148256171c2565b5b60200260200101818152505080806001019150506147f0565b508092505050919050565b6000614854614be0565b6000016000838152602001908152602001600020549050919050565b61489c7f714373bb2f2144c87b3e52bc60c4d5a7066b2e23d5bf408bcb9eaf24ccb9cf0260001b6144e6565b6148c87fa2db81b69fdf15a5c420c8ff9c6e3def280ef84cf31afa9558cd3f6c40b16f2660001b6144e6565b6148f47f0863a359a857d21a5d3981b95d1fc7d088b2420cf573ea197c0a39c7de02dd5760001b6144e6565b806148fd6144e9565b60000160008481526020019081526020016000209080519060200190614924929190615e8f565b505050565b6001816000016000828254019250508190555050565b61494d868686868686615147565b61495b8686868686866153be565b505050505050565b50565b60008060418351036149a75760008060006020860151925060408601519150606086015160001a905061499b87828585615595565b945094505050506149e0565b60408351036149d75760008060208501519150604085015190506149cc8683836156a1565b9350935050506149e0565b60006002915091505b9250929050565b600060048111156149fb576149fa617ac7565b5b816004811115614a0e57614a0d617ac7565b5b0315614bb05760016004811115614a2857614a27617ac7565b5b816004811115614a3b57614a3a617ac7565b5b03614a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a7290617b42565b60405180910390fd5b60026004811115614a8f57614a8e617ac7565b5b816004811115614aa257614aa1617ac7565b5b03614ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ad990617bae565b60405180910390fd5b60036004811115614af657614af5617ac7565b5b816004811115614b0957614b08617ac7565b5b03614b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b4090617c40565b60405180910390fd5b600480811115614b5c57614b5b617ac7565b5b816004811115614b6f57614b6e617ac7565b5b03614baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ba690617cd2565b60405180910390fd5b5b50565b50565b614bc284848484615700565b614bd1336000868686866153be565b50505050565b50565b50565b50565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614c1b82600001615883565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603614c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c8890617d64565b60405180910390fd5b8151835114614cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ccc90617df6565b60405180910390fd5b614ce3868686868686615894565b6000614ced614618565b600001905060005b8451811015614e9f576000858281518110614d1357614d126171c2565b5b602002602001015190506000858381518110614d3257614d316171c2565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dca90617e88565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380600101945050508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614e9191906174f1565b925050819055505050614cf5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614f16929190617ea8565b60405180910390a450505050505050565b614f468473ffffffffffffffffffffffffffffffffffffffff166158aa565b156150f6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401614f8c959493929190617f34565b6020604051808303816000875af1925050508015614fc857506040513d601f19601f82011682018060405250810190614fc59190617fb1565b60015b61506d57614fd4617feb565b806308c379a0036150305750614fe861800d565b80614ff35750615032565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161502791906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150649061810f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146150f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150eb906181a1565b60405180910390fd5b505b505050505050565b600061510d83600001836158bd565b60001c905092915050565b600061512682600001615883565b9050919050565b600061513c83600001836158bd565b60001c905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036151b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151ad90617d64565b60405180910390fd5b6151d48686866151c587615931565b6151ce87615931565b86615894565b60006151de614618565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561527a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161527190617e88565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461533091906174f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516153ad9291906181c1565b60405180910390a450505050505050565b6153dd8473ffffffffffffffffffffffffffffffffffffffff166158aa565b1561558d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016154239594939291906181ea565b6020604051808303816000875af192505050801561545f57506040513d601f19601f8201168201806040525081019061545c9190617fb1565b60015b6155045761546b617feb565b806308c379a0036154c7575061547f61800d565b8061548a57506154c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154be91906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154fb9061810f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461558b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615582906181a1565b60405180910390fd5b505b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156155d0576000600391509150615698565b601b8560ff16141580156155e85750601c8560ff1614155b156155fa576000600491509150615698565b60006001878787876040516000815260200160405260405161561f949392919061826f565b6020604051602081039080840390855afa158015615641573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361568f57600060019250925050615698565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6156e491906174f1565b90506156f287828885615595565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361576f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161576690618326565b60405180910390fd5b61578e3360008661577f87615931565b61578887615931565b86615894565b81615797614618565b600001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546157f791906174f1565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516158759291906181c1565b60405180910390a450505050565b600081600001805490509050919050565b6158a28686868686866159ab565b505050505050565b600080823b905060008111915050919050565b600081836000018054905011615908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158ff906183b8565b60405180910390fd5b82600001828154811061591e5761591d6171c2565b5b9060005260206000200154905092915050565b60606000600167ffffffffffffffff8111156159505761594f61611a565b5b60405190808252806020026020018201604052801561597e5781602001602082028036833780820191505090505b5090508281600081518110615996576159956171c2565b5b60200260200101818152505080915050919050565b6159b98686868686866159c1565b505050505050565b6159cf868686868686615c72565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614615c6a576000615a0c614be0565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015615c64576000878281518110615ac157615ac06171c2565b5b602002602001015190506000811115615c56576000898381518110615ae957615ae86171c2565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603615b5857818760000160008381526020019081526020016000206000828254615b4c91906174f1565b92505081905550615ba3565b81615b638d836133e9565b03615ba257615b8c8c876000848152602001908152602001600020615c7a90919063ffffffff16565b50615ba08186615caa90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1603615c0857818760000160008381526020019081526020016000206000828254615bfc91906175bc565b92505081905550615c54565b6000615c148c836133e9565b03615c5357615c3d8b876000848152602001908152602001600020615cc490919063ffffffff16565b50615c518185615cf490919063ffffffff16565b505b5b505b818060010192505050615aa3565b50505050505b505050505050565b505050505050565b6000615ca2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615d0e565b905092915050565b6000615cbc836000018360001b615d0e565b905092915050565b6000615cec836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615dfc565b905092915050565b6000615d06836000018360001b615dfc565b905092915050565b60008083600101600084815260200190815260200160002054905060008114615df057600084600001600186600001805490500381548110615d5357615d526171c2565b5b9060005260206000200154905080856000016001840381548110615d7a57615d796171c2565b5b906000526020600020018190555081856001016000838152602001908152602001600020819055505083600001805480615db757615db66183d8565b5b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050615df6565b60009150505b92915050565b6000615e088383615e6c565b615e61578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615e66565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054615e9b90616f0d565b90600052602060002090601f016020900481019282615ebd5760008555615f04565b82601f10615ed657805160ff1916838001178555615f04565b82800160010185558215615f04579182015b82811115615f03578251825591602001919060010190615ee8565b5b509050615f119190615f15565b5090565b5b80821115615f2e576000816000905550600101615f16565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615f7182615f46565b9050919050565b615f8181615f66565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b6000819050919050565b615fb781615fa4565b8114615fc257600080fd5b50565b600081359050615fd481615fae565b92915050565b60008060408385031215615ff157615ff0615f3c565b5b6000615fff85828601615f8f565b925050602061601085828601615fc5565b9150509250929050565b61602381615fa4565b82525050565b600060208201905061603e600083018461601a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61607981616044565b811461608457600080fd5b50565b60008135905061609681616070565b92915050565b6000602082840312156160b2576160b1615f3c565b5b60006160c084828501616087565b91505092915050565b60008115159050919050565b6160de816160c9565b82525050565b60006020820190506160f960008301846160d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61615282616109565b810181811067ffffffffffffffff821117156161715761617061611a565b5b80604052505050565b6000616184615f32565b90506161908282616149565b919050565b600067ffffffffffffffff8211156161b0576161af61611a565b5b6161b982616109565b9050602081019050919050565b82818337600083830152505050565b60006161e86161e384616195565b61617a565b90508281526020810184848401111561620457616203616104565b5b61620f8482856161c6565b509392505050565b600082601f83011261622c5761622b6160ff565b5b813561623c8482602086016161d5565b91505092915050565b60008060006060848603121561625e5761625d615f3c565b5b600061626c86828701615fc5565b935050602061627d86828701615fc5565b925050604084013567ffffffffffffffff81111561629e5761629d615f41565b5b6162aa86828701616217565b9150509250925092565b600067ffffffffffffffff8211156162cf576162ce61611a565b5b6162d882616109565b9050602081019050919050565b60006162f86162f3846162b4565b61617a565b90508281526020810184848401111561631457616313616104565b5b61631f8482856161c6565b509392505050565b600082601f83011261633c5761633b6160ff565b5b813561634c8482602086016162e5565b91505092915050565b600080600080600060a0868803121561637157616370615f3c565b5b600086013567ffffffffffffffff81111561638f5761638e615f41565b5b61639b88828901616327565b95505060206163ac88828901615f8f565b94505060406163bd88828901615f8f565b93505060606163ce88828901615f8f565b92505060806163df88828901615f8f565b9150509295509295909350565b60006020828403121561640257616401615f3c565b5b600061641084828501615fc5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616453578082015181840152602081019050616438565b83811115616462576000848401525b50505050565b600061647382616419565b61647d8185616424565b935061648d818560208601616435565b61649681616109565b840191505092915050565b600060208201905081810360008301526164bb8184616468565b905092915050565b6000602082840312156164d9576164d8615f3c565b5b60006164e784828501615f8f565b91505092915050565b600067ffffffffffffffff82111561650b5761650a61611a565b5b602082029050602081019050919050565b600080fd5b600061653461652f846164f0565b61617a565b905080838252602082019050602084028301858111156165575761655661651c565b5b835b81811015616580578061656c8882615fc5565b845260208401935050602081019050616559565b5050509392505050565b600082601f83011261659f5761659e6160ff565b5b81356165af848260208601616521565b91505092915050565b600080600080600060a086880312156165d4576165d3615f3c565b5b60006165e288828901615f8f565b95505060206165f388828901615f8f565b945050604086013567ffffffffffffffff81111561661457616613615f41565b5b6166208882890161658a565b935050606086013567ffffffffffffffff81111561664157616640615f41565b5b61664d8882890161658a565b925050608086013567ffffffffffffffff81111561666e5761666d615f41565b5b61667a88828901616217565b9150509295509295909350565b61669081615f66565b82525050565b60006020820190506166ab6000830184616687565b92915050565b600067ffffffffffffffff8211156166cc576166cb61611a565b5b602082029050602081019050919050565b60006166f06166eb846166b1565b61617a565b905080838252602082019050602084028301858111156167135761671261651c565b5b835b8181101561673c57806167288882615f8f565b845260208401935050602081019050616715565b5050509392505050565b600082601f83011261675b5761675a6160ff565b5b813561676b8482602086016166dd565b91505092915050565b6000806040838503121561678b5761678a615f3c565b5b600083013567ffffffffffffffff8111156167a9576167a8615f41565b5b6167b585828601616746565b925050602083013567ffffffffffffffff8111156167d6576167d5615f41565b5b6167e28582860161658a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61682181615fa4565b82525050565b60006168338383616818565b60208301905092915050565b6000602082019050919050565b6000616857826167ec565b61686181856167f7565b935061686c83616808565b8060005b8381101561689d5781516168848882616827565b975061688f8361683f565b925050600181019050616870565b5085935050505092915050565b600060208201905081810360008301526168c4818461684c565b905092915050565b600060e0820190506168e1600083018a61601a565b6168ee602083018961601a565b6168fb604083018861601a565b616908606083018761601a565b616915608083018661601a565b61692260a0830185616687565b61692f60c083018461601a565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61697081615f66565b82525050565b60006169828383616967565b60208301905092915050565b6000602082019050919050565b60006169a68261693b565b6169b08185616946565b93506169bb83616957565b8060005b838110156169ec5781516169d38882616976565b97506169de8361698e565b9250506001810190506169bf565b5085935050505092915050565b60006020820190508181036000830152616a13818461699b565b905092915050565b600080fd5b60008083601f840112616a3657616a356160ff565b5b8235905067ffffffffffffffff811115616a5357616a52616a1b565b5b602083019150836020820283011115616a6f57616a6e61651c565b5b9250929050565b600080600060408486031215616a8f57616a8e615f3c565b5b600084013567ffffffffffffffff811115616aad57616aac615f41565b5b616ab986828701616a20565b9350935050602084013567ffffffffffffffff811115616adc57616adb615f41565b5b616ae886828701616217565b9150509250925092565b60008060408385031215616b0957616b08615f3c565b5b6000616b1785828601615fc5565b9250506020616b2885828601615f8f565b9150509250929050565b616b3b816160c9565b8114616b4657600080fd5b50565b600081359050616b5881616b32565b92915050565b60008060408385031215616b7557616b74615f3c565b5b6000616b8385828601615f8f565b9250506020616b9485828601616b49565b9150509250929050565b600080600080600080600060e0888a031215616bbd57616bbc615f3c565b5b600088013567ffffffffffffffff811115616bdb57616bda615f41565b5b616be78a828b01616327565b9750506020616bf88a828b01615fc5565b9650506040616c098a828b01615fc5565b9550506060616c1a8a828b01615fc5565b9450506080616c2b8a828b01615fc5565b93505060a0616c3c8a828b01615fc5565b92505060c088013567ffffffffffffffff811115616c5d57616c5c615f41565b5b616c698a828b01616217565b91505092959891949750929550565b60008060408385031215616c8f57616c8e615f3c565b5b6000616c9d85828601615f8f565b9250506020616cae85828601615f8f565b9150509250929050565b600080600080600060a08688031215616cd457616cd3615f3c565b5b6000616ce288828901615f8f565b9550506020616cf388828901615f8f565b9450506040616d0488828901615fc5565b9350506060616d1588828901615fc5565b925050608086013567ffffffffffffffff811115616d3657616d35615f41565b5b616d4288828901616217565b9150509295509295909350565b6000819050919050565b616d6a616d6582615fa4565b616d4f565b82525050565b60008160601b9050919050565b6000616d8882616d70565b9050919050565b6000616d9a82616d7d565b9050919050565b616db2616dad82615f66565b616d8f565b82525050565b6000616dc48287616d59565b602082019150616dd48286616d59565b602082019150616de48285616da1565b601482019150616df48284616d59565b60208201915081905095945050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000616e3c600283616424565b9150616e4782616e06565b602082019050919050565b60006020820190508181036000830152616e6b81616e2f565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000616ea8600283616424565b9150616eb382616e72565b602082019050919050565b60006020820190508181036000830152616ed781616e9b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680616f2557607f821691505b602082108103616f3857616f37616ede565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000616f74601d83616424565b9150616f7f82616f3e565b602082019050919050565b60006020820190508181036000830152616fa381616f67565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154616fd781616f0d565b616fe18186616faa565b94506001821660008114616ffc576001811461700d57617040565b60ff19831686528186019350617040565b61701685616fb5565b60005b8381101561703857815481890152600182019150602081019050617019565b838801955050505b50505092915050565b600061705482616419565b61705e8185616faa565b935061706e818560208601616435565b80840191505092915050565b60006170868285616fca565b91506170928284617049565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006170fa602983616424565b91506171058261709e565b604082019050919050565b60006020820190508181036000830152617129816170ed565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061718c602983616424565b915061719782617130565b604082019050919050565b600060208201905081810360008301526171bb8161717f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061724d603183616424565b9150617258826171f1565b604082019050919050565b6000602082019050818103600083015261727c81617240565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b60006172b9600383616424565b91506172c482617283565b602082019050919050565b600060208201905081810360008301526172e8816172ac565b9050919050565b7f4e43000000000000000000000000000000000000000000000000000000000000600082015250565b6000617325600283616424565b9150617330826172ef565b602082019050919050565b6000602082019050818103600083015261735481617318565b9050919050565b600081905092915050565b600080fd5b6000617377838561735b565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156173aa576173a9617366565b5b6020830292506173bb8385846161c6565b82840190509392505050565b60006173d482858761736b565b91506173e08284616da1565b601482019150819050949350505050565b60006173fd8284616da1565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061747582615fa4565b915061748083615fa4565b9250826174905761748f61740c565b5b828204905092915050565b60006174a682615f46565b9050919050565b60006174b882616d7d565b9050919050565b6174d06174cb8261749b565b6174ad565b82525050565b60006174e282846174bf565b60148201915081905092915050565b60006174fc82615fa4565b915061750783615fa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561753c5761753b61743b565b5b828201905092915050565b60006175538284616d59565b60208201915081905092915050565b600061756d82615fa4565b915061757883615fa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156175b1576175b061743b565b5b828202905092915050565b60006175c782615fa4565b91506175d283615fa4565b9250828210156175e5576175e461743b565b5b828203905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061764c602983616424565b9150617657826175f0565b604082019050919050565b6000602082019050818103600083015261767b8161763f565b9050919050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006176b8600283616424565b91506176c382617682565b602082019050919050565b600060208201905081810360008301526176e7816176ab565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617724600383616424565b915061772f826176ee565b602082019050919050565b6000602082019050818103600083015261775381617717565b9050919050565b7f4941430000000000000000000000000000000000000000000000000000000000600082015250565b6000617790600383616424565b915061779b8261775a565b602082019050919050565b600060208201905081810360008301526177bf81617783565b9050919050565b60006177d2828b617049565b91506177de828a616d59565b6020820191506177ee8289616d59565b6020820191506177fe8288616d59565b60208201915061780e8287616d59565b60208201915061781e8286616d59565b60208201915061782e8285616da1565b60148201915061783e8284616d59565b6020820191508190509998505050505050505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006178b0602b83616424565b91506178bb82617854565b604082019050919050565b600060208201905081810360008301526178df816178a3565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061791c601c83616faa565b9150617927826178e6565b601c82019050919050565b6000819050919050565b6000819050919050565b61795761795282617932565b61793c565b82525050565b60006179688261790f565b91506179748284617946565b60208201915081905092915050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179b9600283616424565b91506179c482617983565b602082019050919050565b600060208201905081810360008301526179e8816179ac565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a25600383616424565b9150617a30826179ef565b602082019050919050565b60006020820190508181036000830152617a5481617a18565b9050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617a91600283616424565b9150617a9c82617a5b565b602082019050919050565b60006020820190508181036000830152617ac081617a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617b2c601883616424565b9150617b3782617af6565b602082019050919050565b60006020820190508181036000830152617b5b81617b1f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617b98601f83616424565b9150617ba382617b62565b602082019050919050565b60006020820190508181036000830152617bc781617b8b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617c2a602283616424565b9150617c3582617bce565b604082019050919050565b60006020820190508181036000830152617c5981617c1d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617cbc602283616424565b9150617cc782617c60565b604082019050919050565b60006020820190508181036000830152617ceb81617caf565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000617d4e602583616424565b9150617d5982617cf2565b604082019050919050565b60006020820190508181036000830152617d7d81617d41565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000617de0602883616424565b9150617deb82617d84565b604082019050919050565b60006020820190508181036000830152617e0f81617dd3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000617e72602b83616424565b9150617e7d82617e16565b604082019050919050565b60006020820190508181036000830152617ea181617e65565b9050919050565b60006040820190508181036000830152617ec2818561684c565b90508181036020830152617ed6818461684c565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000617f0682617edf565b617f108185617eea565b9350617f20818560208601616435565b617f2981616109565b840191505092915050565b600060a082019050617f496000830188616687565b617f566020830187616687565b8181036040830152617f68818661684c565b90508181036060830152617f7c818561684c565b90508181036080830152617f908184617efb565b90509695505050505050565b600081519050617fab81616070565b92915050565b600060208284031215617fc757617fc6615f3c565b5b6000617fd584828501617f9c565b91505092915050565b60008160e01c9050919050565b600060033d111561800a5760046000803e618007600051617fde565b90505b90565b600060443d1061809a5761801f615f32565b60043d036004823e80513d602482011167ffffffffffffffff8211171561804757505061809a565b808201805167ffffffffffffffff811115618065575050505061809a565b80602083010160043d03850181111561808257505050505061809a565b61809182602001850186616149565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006180f9603483616424565b91506181048261809d565b604082019050919050565b60006020820190508181036000830152618128816180ec565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061818b602883616424565b91506181968261812f565b604082019050919050565b600060208201905081810360008301526181ba8161817e565b9050919050565b60006040820190506181d6600083018561601a565b6181e3602083018461601a565b9392505050565b600060a0820190506181ff6000830188616687565b61820c6020830187616687565b618219604083018661601a565b618226606083018561601a565b81810360808301526182388184617efb565b90509695505050505050565b61824d81617932565b82525050565b600060ff82169050919050565b61826981618253565b82525050565b60006080820190506182846000830187618244565b6182916020830186618260565b61829e6040830185618244565b6182ab6060830184618244565b95945050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618310602183616424565b915061831b826182b4565b604082019050919050565b6000602082019050818103600083015261833f81618303565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006183a2602283616424565b91506183ad82618346565b604082019050919050565b600060208201905081810360008301526183d181618395565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1fe9bb64fcb43ea7441b33b2a6b462099005f2765dcfec1b1a2601a5da5d56d64736f6c634300080d0033"; type CyberDropBaseConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts index 605eebd..e5e5c68 100644 --- a/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts @@ -478,6 +478,30 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "mintRandom", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, { inputs: [ { @@ -510,6 +534,30 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "_max", + type: "uint256", + }, + { + internalType: "address", + name: "_sender", + type: "address", + }, + ], + name: "random", + outputs: [ + { + internalType: "uint256", + name: "number", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -705,7 +753,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613deb806100206000396000f3fe6080604052600436106101745760003560e01c8063572b6c05116100cb578063b3a721d11161007f578063e751c98111610059578063e751c98114610527578063e985e9c514610547578063f242432a146105bc57600080fd5b8063b3a721d11461049d578063bc01188e146104bd578063bd85b0391461050757600080fd5b80636dcfd841116100b05780636dcfd8411461043057806385bff2e71461045d578063a22cb4651461047d57600080fd5b8063572b6c051461036a5780636787d449146103c557600080fd5b806313ba55df1161012d5780632eb2c2d6116101075780632eb2c2d6146102b2578063481c6a75146102d25780634e1273f41461033d57600080fd5b806313ba55df1461023e57806318160ddd1461025e5780631b0239471461029257600080fd5b806308dc9f421161015e57806308dc9f42146101dc5780630b885ac3146101ef5780630e89341c1461021157600080fd5b8062fdd58e1461017957806301ffc9a7146101ac575b600080fd5b34801561018557600080fd5b50610199610194366004613187565b6105dc565b6040519081526020015b60405180910390f35b3480156101b857600080fd5b506101cc6101c73660046131df565b6105f1565b60405190151581526020016101a3565b6101cc6101ea36600461330f565b61064a565b3480156101fb57600080fd5b5061020f61020a36600461335f565b610ab4565b005b34801561021d57600080fd5b5061023161022c3660046133df565b610cf8565b6040516101a3919061346e565b34801561024a57600080fd5b506101996102593660046133df565b610e50565b34801561026a57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6054610199565b34801561029e57600080fd5b506101996102ad366004613481565b610e5b565b3480156102be57600080fd5b5061020f6102cd366004613531565b610ea5565b3480156102de57600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a3565b34801561034957600080fd5b5061035d6103583660046135db565b610f9f565b6040516101a391906136e1565b34801561037657600080fd5b506101cc610385366004613481565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff90811691161490565b3480156103d157600080fd5b506103e56103e03660046133df565b6111fa565b604080519788526020880196909652948601939093526060850191909152608084015273ffffffffffffffffffffffffffffffffffffffff1660a083015260c082015260e0016101a3565b34801561043c57600080fd5b5061045061044b3660046133df565b6112d4565b6040516101a391906136f4565b34801561046957600080fd5b5061035d610478366004613481565b6112df565b34801561048957600080fd5b5061020f61049836600461374e565b6112ea565b3480156104a957600080fd5b506101996104b836600461378a565b61142b565b3480156104c957600080fd5b507f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a625473ffffffffffffffffffffffffffffffffffffffff16610318565b34801561051357600080fd5b506101996105223660046133df565b6114db565b34801561053357600080fd5b506101996105423660046137b6565b61150e565b34801561055357600080fd5b506101cc61056236600461384a565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832093909416825291909152205460ff1690565b3480156105c857600080fd5b5061020f6105d7366004613874565b611892565b60006105e88383611985565b90505b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604081205460ff166105eb565b600080610655611a64565b60008681527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260409020600681015460038201549293509091869161069c91613908565b10156106ef5760405162461bcd60e51b815260206004820152600260248201527f435200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b805442118015610703575080600101544211155b61074f5760405162461bcd60e51b815260206004820152600360248201527f4f4f54000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b84816002015461075f919061391f565b34146107ad5760405162461bcd60e51b815260206004820152600260248201527f494100000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260078201602090815260408083205481519283018a9052908201889052606085811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690830152607482018190529190609401604051602081830303815290604052905060006108577f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90565b905060006108c3886108bd85805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611ae5565b825490915073ffffffffffffffffffffffffffffffffffffffff80831691161461092f5760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b88856006016000828254610943919061395c565b909155505073ffffffffffffffffffffffffffffffffffffffff86166000908152600786016020526040902080546001019055610991868b8b60405180602001604052806000815250611b09565b600285015415610a5f57600060648660040154346109af919061391f565b6109b99190613974565b905060006109c78234613908565b600588015460405191925073ffffffffffffffffffffffffffffffffffffffff169082156108fc029083906000818181858888f19350505050158015610a11573d6000803e3d6000fd5b50600484015460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f19350505050158015610a5b573d6000803e3d6000fd5b5050505b888a8773ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a45060019998505050505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610b3a5760405162461bcd60e51b815260206004820152600260248201527f4e4f00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fd9b67a26000000000000000000000000000000000000000000000000000000006000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f845f7f8d885943dffdc1524acbd9538b2923f93aad26d306df3b8982c7f0632d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c3485611b2a565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5f8054938616938216939093179092557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a628054919094169116179091555050565b60008181527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c836020526040812080546060929190610d35906139af565b80601f0160208091040260200160405190810160405280929190818152602001828054610d61906139af565b8015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b505050505090508051600003610e065760405162461bcd60e51b815260206004820152601d60248201527f455243313135355552493a20746f6b656e4964206e6f7420657869737400000060448201526064016106e6565b604051610e39907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c84908390602001613a1e565b604051602081830303815290604052915050919050565b60006105eb82611b60565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a6160205260408120546105eb565b73ffffffffffffffffffffffffffffffffffffffff8516331480610f18575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b610f8a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611b96565b5050505050565b606081518351146110185760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106e6565b82517f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b9060009067ffffffffffffffff81111561105757611057613203565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b50905060005b85518110156111f157600073ffffffffffffffffffffffffffffffffffffffff168682815181106110b9576110b9613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361114a5760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106e6565b82600086838151811061115f5761115f613afb565b60200260200101518152602001908152602001600020600087838151811061118957611189613afb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106111de576111de613afb565b6020908102919091010152600101611086565b50949350505050565b60008181527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482918291829182918291829182036112865760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b805460018201546002830154600384015460048501546005860154600690960154949e939d50919b509950975073ffffffffffffffffffffffffffffffffffffffff90921695509350915050565b60606105eb82611bba565b60606105eb82611c93565b73ffffffffffffffffffffffffffffffffffffffff821633036113755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106e6565b3360008181527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008281527f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65a60205260408120600381015482036114ab5760405162461bcd60e51b815260206004820152600360248201527f444e45000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600782016020526040902054949350505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea60205260408120546105eb565b60008061151b8888613908565b116115685760405162461bcd60e51b815260206004820152600260248201527f495400000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60648311156115b95760405162461bcd60e51b815260206004820152600360248201527f49534f000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b600084116116095760405162461bcd60e51b815260206004820152600360248201527f494143000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e6000611634611a64565b9050600061164182610e5b565b905060008b8b8b8b8b8b8888604051602001611664989796959493929190613b2a565b604051602081830303815290604052905060006116d9876108bd84805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b855490915073ffffffffffffffffffffffffffffffffffffffff8083169116146117455760405162461bcd60e51b815260206004820152600260248201527f4e4d00000000000000000000000000000000000000000000000000000000000060448201526064016106e6565b60028501549550611756868e611d69565b6117668560020180546001019055565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260038601602052604090208054600101905560007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe659600101600088815260200190815260200160002090508c81600001819055508b81600101819055508a8160020181905550898160030181905550888160040181905550848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516331480611905575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b6119775760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106e6565b610f98338686868686611dac565b600073ffffffffffffffffffffffffffffffffffffffff8316611a105760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016106e6565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff95909516845293905250205490565b600060183610801590611aad57507fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff1633145b15611add57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b503390565b90565b6000806000611af48585611dc8565b91509150611b0181611e36565b509392505050565b611b1584848484612025565b611b243360008686868661218c565b50505050565b8051611b5c907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c849060208401906130c5565b5050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206105eb906123d1565b611ba48686868686866123db565b611bb28686868686866126e3565b505050505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb60205260408120606091611bf3826123d1565b67ffffffffffffffff811115611c0b57611c0b613203565b604051908082528060200260200182016040528015611c34578160200160208202803683370190505b50905060005b611c43836123d1565b811015611b0157611c548382612876565b828281518110611c6657611c66613afb565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611c3a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec60205260408120606091611ce3826123d1565b67ffffffffffffffff811115611cfb57611cfb613203565b604051908082528060200260200182016040528015611d24578160200160208202803683370190505b50905060005b611d33836123d1565b811015611b0157611d448382612876565b828281518110611d5657611d56613afb565b6020908102919091010152600101611d2a565b60008281527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c83602090815260409091208251611da7928401906130c5565b505050565b611dba868686868686612882565b611bb286868686868661218c565b6000808251604103611dfe5760208301516040840151606085015160001a611df287828585612a88565b94509450505050611e2f565b8251604003611e275760208301516040840151611e1c868383612ba0565b935093505050611e2f565b506000905060025b9250929050565b6000816004811115611e4a57611e4a613b97565b03611e525750565b6001816004811115611e6657611e66613b97565b03611eb35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106e6565b6002816004811115611ec757611ec7613b97565b03611f145760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106e6565b6003816004811115611f2857611f28613b97565b03611f9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6004816004811115611faf57611faf613b97565b036120225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b50565b73ffffffffffffffffffffffffffffffffffffffff84166120ae5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b6120cd336000866120be87612bf2565b6120c787612bf2565b86612c3d565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120805484929061212b90849061395c565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906122039089908990889088908890600401613bc6565b6020604051808303816000875af192505050801561225c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261225991810190613c16565b60015b61231157612268613c33565b806308c379a0036122a1575061227c613c4e565b8061228757506122a3565b8060405162461bcd60e51b81526004016106e6919061346e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106e6565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b50505050505050565b60006105eb825490565b73ffffffffffffffffffffffffffffffffffffffff84166124645760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b81518351146124db5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106e6565b6124e9868686868686612c3d565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60005b845181101561265b57600085828151811061252a5761252a613afb565b60200260200101519050600085838151811061254857612548613afb565b6020908102919091018101516000848152868352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156125fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008381526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320938590039093558a16815290812080546001959095019483929061264e90849061395c565b9091555061250d92505050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126d2929190613cf6565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611bb2576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061275a9089908990889088908890600401613d1b565b6020604051808303816000875af19250505080156127b3575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526127b091810190613c16565b60015b6127bf57612268613c33565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146123c85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016106e6565b60006105e88383612c4b565b73ffffffffffffffffffffffffffffffffffffffff841661290b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106e6565b61291a8686866120be87612bf2565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020818152604080842073ffffffffffffffffffffffffffffffffffffffff8a16855290915290912054838110156129e05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016106e6565b60008581526020838152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093879003909355871681529081208054859290612a2c90849061395c565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8088169289821692918b16917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016126d2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612abf5750600090506003612b97565b8460ff16601b14158015612ad757508460ff16601c14155b15612ae85750600090506004612b97565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b3c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9057600060019250925050612b97565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831681612bd660ff86901c601b61395c565b9050612be487828885612a88565b935093505050935093915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c2c57612c2c613afb565b602090810291909101015292915050565b611bb2868686868686612cec565b81546000908210612cc45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016106e6565b826000018281548110612cd957612cd9613afb565b9060005260206000200154905092915050565b611bb28686868686868373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611bb25773ffffffffffffffffffffffffffffffffffffffff85811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040808220928716825281207fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea927fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb929091905b8751811015612f22576000878281518110612dda57612dda613afb565b602002602001015190506000811115612f19576000898381518110612e0157612e01613afb565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603612e685760008181526020889052604081208054849290612e5d90849061395c565b90915550612e9d9050565b81612e738d83611985565b03612e9d576000818152602087905260409020612e90908d612f2f565b50612e9b8582612f51565b505b73ffffffffffffffffffffffffffffffffffffffff8b16612ee15760008181526020889052604081208054849290612ed6908490613908565b90915550612f179050565b612eeb8b82611985565b600003612f17576000818152602087905260409020612f0a908c612f5d565b50612f158482612f7f565b505b505b50600101612dbd565b5050505050505050505050565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416612f8b565b60006105e88383612f8b565b60006105e88373ffffffffffffffffffffffffffffffffffffffff8416613076565b60006105e88383613076565b6000818152600183016020526040812054801561306c57835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612fdb57612fdb613afb565b906000526020600020015490508085600001600184038154811061300157613001613afb565b600091825260208083209091019290925591825260018601905260409020819055835484908061303357613033613d86565b600190038181906000526020600020016000905590558360010160008481526020019081526020016000206000905560019150506105eb565b60009150506105eb565b60008181526001830160205260408120546130bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105eb565b5060006105eb565b8280546130d1906139af565b90600052602060002090601f0160209004810192826130f35760008555613139565b82601f1061310c57805160ff1916838001178555613139565b82800160010185558215613139579182015b8281111561313957825182559160200191906001019061311e565b50613145929150613149565b5090565b5b80821115613145576000815560010161314a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461318257600080fd5b919050565b6000806040838503121561319a57600080fd5b6131a38361315e565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461202257600080fd5b6000602082840312156131f157600080fd5b81356131fc816131b1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561327657613276613203565b6040525050565b600082601f83011261328e57600080fd5b813567ffffffffffffffff8111156132a8576132a8613203565b6040516132dd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182613232565b8181528460208386010111156132f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561332457600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561334957600080fd5b6133558682870161327d565b9150509250925092565b600080600080600060a0868803121561337757600080fd5b853567ffffffffffffffff81111561338e57600080fd5b61339a8882890161327d565b9550506133a96020870161315e565b93506133b76040870161315e565b92506133c56060870161315e565b91506133d36080870161315e565b90509295509295909350565b6000602082840312156133f157600080fd5b5035919050565b60005b838110156134135781810151838201526020016133fb565b83811115611b245750506000910152565b6000815180845261343c8160208601602086016133f8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e86020830184613424565b60006020828403121561349357600080fd5b6105e88261315e565b600067ffffffffffffffff8211156134b6576134b6613203565b5060051b60200190565b600082601f8301126134d157600080fd5b813560206134de8261349c565b6040516134eb8282613232565b83815260059390931b850182019282810191508684111561350b57600080fd5b8286015b84811015613526578035835291830191830161350f565b509695505050505050565b600080600080600060a0868803121561354957600080fd5b6135528661315e565b94506135606020870161315e565b9350604086013567ffffffffffffffff8082111561357d57600080fd5b61358989838a016134c0565b9450606088013591508082111561359f57600080fd5b6135ab89838a016134c0565b935060808801359150808211156135c157600080fd5b506135ce8882890161327d565b9150509295509295909350565b600080604083850312156135ee57600080fd5b823567ffffffffffffffff8082111561360657600080fd5b818501915085601f83011261361a57600080fd5b813560206136278261349c565b6040516136348282613232565b83815260059390931b850182019282810191508984111561365457600080fd5b948201945b838610156136795761366a8661315e565b82529482019490820190613659565b9650508601359250508082111561368f57600080fd5b5061369c858286016134c0565b9150509250929050565b600081518084526020808501945080840160005b838110156136d6578151875295820195908201906001016136ba565b509495945050505050565b6020815260006105e860208301846136a6565b6020808252825182820181905260009190848201906040850190845b8181101561374257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613710565b50909695505050505050565b6000806040838503121561376157600080fd5b61376a8361315e565b91506020830135801515811461377f57600080fd5b809150509250929050565b6000806040838503121561379d57600080fd5b823591506137ad6020840161315e565b90509250929050565b600080600080600080600060e0888a0312156137d157600080fd5b873567ffffffffffffffff808211156137e957600080fd5b6137f58b838c0161327d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a013591508082111561382e57600080fd5b5061383b8a828b0161327d565b91505092959891949750929550565b6000806040838503121561385d57600080fd5b6138668361315e565b91506137ad6020840161315e565b600080600080600060a0868803121561388c57600080fd5b6138958661315e565b94506138a36020870161315e565b93506040860135925060608601359150608086013567ffffffffffffffff8111156138cd57600080fd5b6135ce8882890161327d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561391a5761391a6138d9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613957576139576138d9565b500290565b6000821982111561396f5761396f6138d9565b500190565b6000826139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c908216806139c357607f821691505b6020821081036139fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008151613a148185602086016133f8565b9290920192915050565b600080845481600182811c915080831680613a3a57607f831692505b60208084108203613a72577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015613a865760018114613ab557613ae2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650613ae2565b60008b81526020902060005b86811015613ada5781548b820152908501908301613ac1565b505084890196505b505050505050613af28185613a02565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008951613b3c818460208e016133f8565b91909101978852506020870195909552604086019390935260608086019290925260808501521b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a083015260b482015260d401919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152613c0b60a0830184613424565b979650505050505050565b600060208284031215613c2857600080fd5b81516131fc816131b1565b600060033d1115611ae25760046000803e5060005160e01c90565b600060443d1015613c5c5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613caa57505050505090565b8285019150815181811115613cc25750505050505090565b843d8701016020828501011115613cdc5750505050505090565b613ceb60208286010187613232565b509095945050505050565b604081526000613d0960408301856136a6565b8281036020840152613af281856136a6565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152613d5460a08301866136a6565b8281036060840152613d6681866136a6565b90508281036080840152613d7a8185613424565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201a6999b53581d5cf049595919138320a956a81261a41c9988de6c222001df13b64736f6c634300080d0033"; + "0x60806040523480156200001157600080fd5b5061843d80620000226000396000f3fe60806040526004361061018a5760003560e01c80636787d449116100d6578063b3a721d11161007f578063e751c98111610059578063e751c9811461060a578063e985e9c514610647578063f242432a146106845761018a565b8063b3a721d114610565578063bc01188e146105a2578063bd85b039146105cd5761018a565b806385bff2e7116100b057806385bff2e7146104c25780638b349f3e146104ff578063a22cb4651461053c5761018a565b80636787d449146104125780636dcfd841146104555780637cafe690146104925761018a565b806318160ddd11610138578063481c6a7511610112578063481c6a751461036d5780634e1273f414610398578063572b6c05146103d55761018a565b806318160ddd146102dc5780631b023947146103075780632eb2c2d6146103445761018a565b80630b885ac3116101695780630b885ac3146102395780630e89341c1461026257806313ba55df1461029f5761018a565b8062fdd58e1461018f57806301ffc9a7146101cc57806308dc9f4214610209575b600080fd5b34801561019b57600080fd5b506101b660048036038101906101b19190615fda565b6106ad565b6040516101c39190616029565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee919061609c565b6106c1565b60405161020091906160e4565b60405180910390f35b610223600480360381019061021e9190616245565b6106e4565b60405161023091906160e4565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190616355565b610aef565b005b34801561026e57600080fd5b50610289600480360381019061028491906163ec565b61103f565b60405161029691906164a1565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906163ec565b6112ee565b6040516102d39190616029565b60405180910390f35b3480156102e857600080fd5b506102f1611300565b6040516102fe9190616029565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906164c3565b61139e565b60405161033b9190616029565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906165b8565b61147b565b005b34801561037957600080fd5b5061038261150f565b60405161038f9190616696565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190616774565b6115c6565b6040516103cc91906168aa565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906164c3565b6117ba565b60405161040991906160e4565b60405180910390f35b34801561041e57600080fd5b50610439600480360381019061043491906163ec565b6118a1565b60405161044c97969594939291906168cc565b60405180910390f35b34801561046157600080fd5b5061047c600480360381019061047791906163ec565b611afc565b60405161048991906169f9565b60405180910390f35b6104ac60048036038101906104a79190616a76565b611b0e565b6040516104b991906160e4565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e491906164c3565b612050565b6040516104f691906168aa565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190616af2565b612062565b6040516105339190616029565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190616b5e565b612238565b005b34801561057157600080fd5b5061058c60048036038101906105879190616af2565b6123ac565b6040516105999190616029565b60405180910390f35b3480156105ae57600080fd5b506105b76125f3565b6040516105c49190616696565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906163ec565b6126aa565b6040516106019190616029565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190616b9e565b6126bc565b60405161063e9190616029565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190616c78565b6132b8565b60405161067b91906160e4565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190616cb8565b613355565b005b60006106b983836133e9565b905092915050565b60006106dd826106cf6134bb565b6134e890919063ffffffff16565b9050919050565b60006107127f69504125a65169bd9ace52315659eeee937ddd4bdf618acb15b713c78401f4c660001b613553565b61073e7faccfc096572c7e3ed3d231dedc6edbc08a8ee7083c56c5fd017fabaf408f082460001b613553565b61076a7f0412321e6c9f536996f3f40453a005c4a3083c4f9eec273735177ceb17b6140560001b613553565b6000610774613556565b90506107a27ff8a6a702a83871e3f896c8eefc0893b7963981937e76884b4f11c7fb499f3b4760001b613553565b6107ce7f02b993527cae523365a22f9447d194978d7ac0f3027271eb30eba924a9a8b00460001b613553565b60006108346107db6136f2565b600101600088815260200190815260200160002060070160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b90506108627f46cd84591a45d31f4753b1f27eada9b11731243cfee8d0e487bb9af6ca20184160001b613553565b61088e7f9d81882fab1e488e996969ec23d09cb97622605bb4d508942af0117cabd1b20b60001b613553565b6000868684846040516020016108a79493929190616db8565b60405160208183030381529060405290506108e47f14a417097b723638a61d8ae753622c1a23209652bf53c528647ca4fbbbd8d17e60001b613553565b6109107f036e543f4b650565194810827e1fc02784e8df335cdac436aee78be36726a56a60001b613553565b60006109348661092684805190602001206137de565b61380e90919063ffffffff16565b90506109627f5b07bba82364645d0d258d29b0de5613380bf36abc1216f1412b2bc393ade5c660001b613553565b61098e7fe169306b6ec3dbbdc82a15559d389711c2171fbc553cc50e407c2e22ced0863260001b613553565b6109ba7fa2f66755fcdc1651ea119ea6965a4a2a02fed2ed5b54717e112662b0c39e7caa60001b613553565b6109c2613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90616e52565b60405180910390fd5b610a7f7f9b3a9722eff62304e4422ed0f66887e99a718588c3a44bbabb55d5595f05160760001b613553565b610aab7f11e03f72ffc8988cbdb454ed20e69f714fed69060ed900ee7e2c7e94ae52dcc060001b613553565b610ad77f2c4240edf1288e6ac4b00dbcf5088b9764c0fde3fbac31357ddb1ea812fd025360001b613553565b610ae2888886613913565b9450505050509392505050565b610b1b7f1e4f3db61d02d43f745245c64298d7f0c1a3e8708559b6670d4ca42c54514f4460001b614280565b610b477f0ac4986fe6d4c3895c8ef5e03bf2b121d82e6cf32614c4c5189671928b98f8e360001b614280565b610b737f145960e0b8e54656e42c3b088b3a10b57bf051eb1c4bb726aa3f9ccfaa056f1c60001b614280565b610b9f7f901a5d83ad9e5900a26fb984a5a99dc96974734dd64371311e5ca412033f4aa560001b614280565b3373ffffffffffffffffffffffffffffffffffffffff16610bbe614283565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90616ebe565b60405180910390fd5b610c647fb7cd82f2e96c1e329917e6a6f329bab37f4868e3a34f88a3ae05f88fe1899b6e60001b614280565b610c907fb5ae9824ef1c4b9d1c19baecf68dbac5d61b7d6069bf88af80ad92642241b4d260001b614280565b610cbc7ff115cefef55a500dd4e6296e9a3d6cc0e8dc3d6712feb6c7f9f051ca69614aa860001b614280565b82610cc5614361565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d327fd72402da254f9ba5a463e2015cebe357527e12a62cd25ecae2e2921778ddc3cb60001b614280565b610d5e7f543c25cfe85aa6f8c53e60eaa7f95103d121790ecad586cf733b8a8818b76f7960001b614280565b6001610d68614283565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610e1d7f18d24b611c0380c8df6354eea02a5a82d3b36fea45384921c977b440fbbeae9f60001b614280565b610e497fe0a44e89e5938bc342f25b353520510937291eb9dcca1342977aa3ec3eda8fc060001b614280565b610e528561443f565b610e7e7fc7c1929af15c5b3153f6eeb8ca93a8874a8cc881a6d885786447b173c210d63460001b614280565b610eaa7f720f9f9246e75a85b11fea637347797614847368b50cbf3d6962eb4bff9a58bf60001b614280565b83610eb3613835565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f207f42fa96a8febb97c55f95796d3fb0d21c410d5ab5adf4ace2d87a196cc4dc3f9760001b614280565b610f4c7fd44b3d45ab725ff9a331429e51865d518e4343c4f6bcdfeeca70765aa2ee70eb60001b614280565b81610f55613835565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc27f1eb6094a4ff364bc1205590533550d7e1d18bb4fc33971eb49a6c38f5c349b1d60001b614280565b610fee7fd671a9abc380ff64132a5a282180f649887bc6379ff36cf2c62463e383d3749b60001b614280565b80610ff7613835565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606061106d7f1c3b8ce455b2ad4634a6bde830f371ccaa9a60a47f7530d5559c60059ac6796360001b6144e6565b6110997f744faa1a7f641981fd5340120b41026f6255d60e762e83a56d1f5e25ace615c060001b6144e6565b6110c57f7ddf9d337eeac748c812ff0c191bca0bd9ad27c607ff6276c26efb1d10350ff960001b6144e6565b60006110cf6144e9565b600001600084815260200190815260200160002080546110ee90616f0d565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90616f0d565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b5050505050905061119a7f31479a340477a3cd3ddd8874968c9b56fbb69a24bd62655bb14254f5e8b6b66f60001b6144e6565b6111c67fb07081f26262d7615671a199ff1ec98be27284b5bbb83db432041ec57553afce60001b6144e6565b6111f27f6f3823429822313601553d8d17013e3cb264da9b810dc4d78587e834dde5ca1060001b6144e6565b6000815103611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90616f8a565b60405180910390fd5b6112627f0758b40c742a6fadcdad3a342e6f0185a043afcf936f6a1f430cfe0a2895409f60001b6144e6565b61128e7fd00b5f2990c6e433c54a778edb076d4dd783ae43a208d2bd579c3e8b8fec22ff60001b6144e6565b6112ba7fac6e807513b0bd038c04f48a60fcaa1ca589bda2965c00a45f99327340337f7060001b6144e6565b6112c26144e9565b600101816040516020016112d792919061707a565b604051602081830303815290604052915050919050565b60006112f9826145c7565b9050919050565b600061132e7fa33d91318f77fb95d2fe4386c2678c14692f4adf788a72bcf2e6161f1537a0df60001b614280565b61135a7f261f9308b795e5a1107f3e9f410b1729e5552cbec6ef68eb8baeb4101526ac8160001b614280565b6113867fc3b939dd6c5215c8cbeda83887c1c350b1860f6de8924882ae7d062b377db98860001b614280565b611399611391613835565b6002016137d0565b905090565b60006113cc7fae1f162029218081da04bc8ad4cc45c451cdd486a41807dfddaa697cdb51db7760001b614280565b6113f87fec18d1e30aaf675a2d5fed1149a973e710441a8383555ea0ffb7ee515f1cd24660001b614280565b6114247f5fad527e5d3d69e8dc7332a6976fecc95c52e88dffc8d20b259e135cb58c4bf660001b614280565b61147461142f613835565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114bb57506114ba85336132b8565b5b6114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190617110565b60405180910390fd5b6115083386868686866145f4565b5050505050565b600061153d7f340aa1274e9ed6d73309ff2182f3df83aa741ede424aa35a2849a2c2144894d360001b614280565b6115697f21d1933df3a4a8fa207ebb584b97eb52ab398c4a1cfec85eb03e5f5f6d1ccf5e60001b614280565b6115957fa7c174764dca473b275d9b1190c3b7f15c9dd7d692ab10c1b9267a4fc13a517b60001b614280565b61159d613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906171a2565b60405180910390fd5b6000611616614618565b60000190506000845167ffffffffffffffff8111156116385761163761611a565b5b6040519080825280602002602001820160405280156116665781602001602082028036833780820191505090505b50905060005b85518110156117ae57600073ffffffffffffffffffffffffffffffffffffffff168682815181106116a05761169f6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590617263565b60405180910390fd5b826000868381518110611714576117136171c2565b5b60200260200101518152602001908152602001600020600087838151811061173f5761173e6171c2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611795576117946171c2565b5b602002602001018181525050808060010191505061166c565b50809250505092915050565b60006117e87fc51b1a04fdf35d4961d655a2e9df2e144166121cdbbd5fcebcda1d4fb6b4afd760001b614645565b6118147f160a64ca27fca7833fe2c155dbc48620377746ad27e180a793134a8b523ea11160001b614645565b6118407ff7ead2e2d6d8c6b4cb4e64bda1cd535361e99fb0ae87d56950d3fc237d1c83e760001b614645565b611848614361565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008060008060006118d87f465fa96a026591afcc73eedf68b5c234111d787bdef224abefbea5f24a6304f660001b613553565b6119047f1a2d192b6ae8580c21449edc18a5c5189abd26b541b43023a7c74f72a23c7be160001b613553565b6119307fcd678e9c959426ff304e44b1af5415d33309a2109427d6ac8491e166b7cb976860001b613553565b600061193a6136f2565b60010160008a8152602001908152602001600020905061197c7fa4b18d81fa899abf513b4e95a051fcd93b2e51d2ed12e1653a1014ce1c00c26460001b613553565b6119a87f83f8325adf643554750cc9e87bae0a5049ec04d2429bacf59c3f9b1108b6884b60001b613553565b6119d47fa4cf44de82e0fd6de50eb99a5e6c9948927be4018461e0737f597b075268826960001b613553565b6000816003015403611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a12906172cf565b60405180910390fd5b611a477f90f8613cbb087340bcca2584e180c5bb0e2901934a061edf860c6dd48c6e76fc60001b613553565b611a737f6ababc2cd4db007b37cf61708a8c9bf1d76d283de7b4eee8b3ed1ced58be40cf60001b613553565b611a9f7f204e74a6d17e8e13984367216650a7a0fe40d524672370a1fa43770fa3b43bcc60001b613553565b806000015481600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060154975097509750975097509750975050919395979092949650565b6060611b0782614648565b9050919050565b6000611b3c7ff24834d51a1c359dacb2d97c14e2fcffc7464051ec52e708ad5863881d6f35da60001b613553565b611b687f7669ffee594535e6f33a4689f9303c5b0be52f7684b56230d794f5750bf5994960001b613553565b611b947ff79b90c16015f799c056f5ef78549f157c8d9c905ffb99eb847d6072ede6f2e460001b613553565b611bc07feb4ed2cbd35ed9850baae47a508cba57a82490d1bb12ebd37e0f3c36f128f31760001b613553565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c259061733b565b60405180910390fd5b611c5a7f7b03635d50a2ac6a2176f76edc64adf6be2cf6903326ad1b85fa61c9d7bf0af260001b613553565b611c867f4e6fc0202bd1107ef1dd2be5a6683c8d6936d2d1c9fec2a089f5d8b8dc92407f60001b613553565b611cb27f9ffb1814439e241f271bc61198718d53cd81db521ea4b918e03143e1aaa2711860001b613553565b611cde7fb8c98bda67af8c290643ba4efdae96f986c3aaec8665c4a5f692f7be2be7fbb360001b613553565b611d0a7f0928c4062428db501eb41553c8d2b14b4940048b02c8701abf121fd545d7238860001b613553565b6000611d14613556565b9050611d427f15b143cbdb1ab87d35daa7e35136263eff53fba20d7c7bb58ba41d93c564cd2e60001b613553565b611d6e7f19a3e3512e07676e18e589506dc158d80b5d7cb3beac1bd9433961c241f15ed260001b613553565b6000611d7d8686905083612062565b9050611dab7f3cdc773ec7a0bbfac9bb175b96dac685fe84427e3e8817908be364e7e19d958e60001b613553565b611dd77f898fd03dc07b76f3fb4a9ad96a6d4ae4938ee88b1b9ae0d839c6fb75851d487160001b613553565b6000868684604051602001611dee939291906173c7565b6040516020818303038152906040529050611e2b7ffa2d084e5aa3bb9d552106093bb156ed767efd13d4ef769f45a1c608608db9ad60001b613553565b611e577fb4adb993f0112309e0dda211c3c872be6fc1e8e1e24c2737bcca45864f4992fc60001b613553565b6000611e7b86611e6d84805190602001206137de565b61380e90919063ffffffff16565b9050611ea97f3385f8936d3613b10a69cd465c8105b4160dd4bb6150da1a8c527fa7bed06c7360001b613553565b611ed57fbedc4adb23e940e294388ee7224af083de5e3284529ef41d6ce9930033a07b5e60001b613553565b611f017fcaf9c7508b1d2979a5c86ba62715d43dcc60bf70be5b83327aaf3f862ff5513860001b613553565b611f09613835565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190616e52565b60405180910390fd5b611fc67f07a7bc365223ab36c77a4a9ea8ebe4b7b8d6231b8ae915ebad4c2f50b2f3d57260001b613553565b611ff27fe7ee1b5bed08b17973242e0848405f3c04f580944813fdbecff270770eb7d18260001b613553565b61201e7f94f361318dbc2681bc9996f924781ee86ece31f3436523b550f4d04cf3874fe660001b613553565b612043888885818110612034576120336171c2565b5b90506020020135600186613913565b9450505050509392505050565b606061205b8261474a565b9050919050565b60006120907f60765bedd401bd9b58bfa600b58a3868c5af8544f7e462831178bd883d38117860001b613553565b6120bc7f2b6a4ce8c1966ea92df90f6cbae66e288ec6448dc56286facce3dfeb13821f2960001b613553565b6120e87f1389e418c0a511e7e3eaa43e4d94e098cb9c042c036c05bc4d684f5125db491d60001b613553565b600042836040516020016120fc91906173f1565b6040516020818303038152906040528051906020012060001c61211f919061746a565b424160405160200161213191906174d6565b6040516020818303038152906040528051906020012060001c612154919061746a565b4345444261216291906174f1565b61216c91906174f1565b61217691906174f1565b61218091906174f1565b61218a91906174f1565b60405160200161219a9190617547565b6040516020818303038152906040528051906020012060001c90506121e17f5b21c6f2374698176296dfe2a8445e7fce913edb407c39cc7d5abab4c5d15b3e60001b613553565b61220d7f3d73192fe1bf95af8a0c91385764162dd6e965f6a777b8de1bd879bdf7de096060001b613553565b83848261221a919061746a565b6122249190617562565b8161222f91906175bc565b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90617662565b60405180910390fd5b806122af614618565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a091906160e4565b60405180910390a35050565b60006123da7f8de92a92eb4f534db65b0725a8a299eb59aca6138bd32c120bbb7dd57a3ab30960001b613553565b6124067fe613f2110dcf45672ce7ada28d0addc56fe733cc274f376124ed0fab09168f7960001b613553565b6124327f4b32fe64b1f0597ff9d8f100de6695d3b21da2485df357cdfa7c687dd882b1cb60001b613553565b600061243c6136f2565b6001016000858152602001908152602001600020905061247e7f333e5fe9b82539e577e6711e227ffb85f984985603e2dcd3b310181f1bcb4ea860001b613553565b6124aa7f2f8b9bc4af379bc9da65e0359701c93e42ca912183d8cfae8427a5607a2cac2b60001b613553565b6124d67f455c527fdc00c09c1476f596faf29cdbf259272fb5eb7bf373b98b5899d2f43260001b613553565b600081600301540361251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906172cf565b60405180910390fd5b6125497f3e6a4520705047fd60862a3b73db1fb921ab171e642d1ddafaccea0294370d6860001b613553565b6125757f43e347200895dc09f6b125f52292b2bbab2f2545f9cc7bc4d8c09c40219efcc760001b613553565b6125a17f9b4beade9509f38d5ffce5a7d5b78ca2a1e8ae892073a7b364f0e4841c25151a60001b613553565b6125ea8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137d0565b91505092915050565b60006126217f0619baf6ca8789a3e86f4aff6d89e719238ed3e720a6993e0accc89ca92b9d4860001b614280565b61264d7fdf5461867b8a8bd8fb4f7803cb9c246a7892adc5b2b475b1f75dba51b2182f7a60001b614280565b6126797faca8ec6ded37615fcf2cd5aa4063085146ed390b11503d1b7d2ea113fb25dd7660001b614280565b612681613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006126b58261484a565b9050919050565b60006126ea7f720938f99de2f11f86876804fff7292696d42b75131e9bac80c0a95c8e5a279060001b613553565b6127167fd806a38c7b5d62d6af24a70340f4e595ddc4623ea115bdb799dfe0d0bacb787160001b613553565b6127427f82e12f199f839c376058aa1ecc504c862f1e16b6ed3bd1b912be770073b6e20060001b613553565b61276e7f5df9890c32153a31c3071d9dc69e4ebe97acca3f7f7ef3e3f74d36b2a88bdef460001b613553565b6000878761277c91906175bc565b116127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906176ce565b60405180910390fd5b6127e87f0492531b4255db2bc8189f4589d26e800181076ba492c838b5ab11e715f2847f60001b613553565b6128147f6e5ae7c332c217ef76c88e8a3a828bedadc25fca4cd857c39daa1789d642e76460001b613553565b6128407fc14eca242eab0aa946075f409d9b8d9698598cf1acd8ae3f19d116a458ccca1f60001b613553565b61286c7f83f27d511f4a33dee6c8cbf58233412fc09cdf67ecf721d46504f311343567c460001b613553565b60648311156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a79061773a565b60405180910390fd5b6128dc7f159c847be75e9bd093bc13b4b6d370fecb5aa1579b8517b2c7e1cc9ad418293460001b613553565b6129087f25bb89bd30e8a1744b71ff33f22a31cc94de7bfaf120ff91eeeac9303ffb834b60001b613553565b6129347f1218d8f17309fb2483a89e7b7e97bfbcc02a3120794538df2dcbd723b527d66960001b613553565b6129607f32b4d025bdd90830de6a84d51a47fe77e74982bfdf3a2749f8a7a613dc06e37260001b613553565b600084116129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a906177a6565b60405180910390fd5b6129cf7f8285f477a723c9b64cfb7be4086753679ac95943cd4466441515be3486e8c53560001b613553565b6129fb7fcba34dcae13ecb803751a3823d65df04bb6dfdd36c62e9dc8019dd46a65bb7ed60001b613553565b612a277f751669b10886962e6900a9e69ce28663127762edbb446168c614741dc82ec4e060001b613553565b6000612a31613835565b9050612a5f7f8a14962ce2b3a5ce0d0137f7e30711ce4290c774a0ca46fa695933ee82d7ae1e60001b613553565b612a8b7fbbe952a07f813f8f03a63cfc960e05d3ba7b1eb47f08549e6cdff14eb60d4d1260001b613553565b6000612a95613556565b9050612ac37f54d3bc4c862888cb85715327572df775563a8a2d4adbe5599357afe9d87ca68460001b613553565b612aef7f2248fee24ebe4d855f90fdd22a450262412705d7526f17a5347c7f629cbc522760001b613553565b6000612afa8261139e565b9050612b287f4c42dfd24abad1c05a3f4f70b7946f0692bee8150918e59af57f0b3db5a6da4d60001b613553565b612b547ff913260939086e368089a839e0841d58895284bb43e1bbac925230740aa0334860001b613553565b60008b8b8b8b8b8b8888604051602001612b759897969594939291906177c6565b6040516020818303038152906040529050612bb27f4d2e27de565216e905e62ac14a701f0ebefa2898551ae6dd80ec8b39a1b073c960001b613553565b612bde7f357fc6ce39641fa002b9859340974f193937eec06e410b560ea8c55f9848b09d60001b613553565b6000612c0287612bf484805190602001206137de565b61380e90919063ffffffff16565b9050612c307f2b8bf47f9dd9ebf95a30441a56580e8c6cdd7a976113a0740a484f69a9f9a51f60001b613553565b612c5c7f7851e13dec3d128dcfdeeb450c4a98237c728693168cb2c30003cf2c555b722860001b613553565b612c887f6d62bde961a1df0136651e214e015a645c511ff369879102410ff00a635cc07a60001b613553565b8460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190616e52565b60405180910390fd5b612d467f7a6ac0a8027b1e93edac2ab8901c948f0e5517215e93b27144e72eb8dc10f06960001b613553565b612d727fe4aa691889ee30419eaeef0947141197b9fc44914eb9e0c9fec36bca603cf86960001b613553565b612d9e7f9d0520a90711ce6b354183a30cfb75a12d13ae3461231704edfcf5d387938f6160001b613553565b612daa856002016137d0565b9550612dd87ffc0c07e3520f96cfbe67b70729c3659036168bae15e56a7faeceb26da24d5dbb60001b613553565b612e047f5959b06c459141c8df2d02d9795dcb8305b253b4cbf36ff3f46c5854ad9e8d7160001b613553565b612e0e868e614870565b612e3a7f4a2a90ed8fd29ea0a282c73c2f1ab1a7b4ac5c3728df33028bb4ec6d7d653f6c60001b613553565b612e667f89952afdbe3ae446eabfd7530b5468afe7226c2f4d9f18bc9b77cbee2ea0a11f60001b613553565b612e7285600201614929565b612e9e7f10a46dfdbae3dd49d7a950ff9e6b688651f17200627cad1639593ee54228315e60001b613553565b612eca7f14c07fdaaadb84d75015844b053d5c42596ba04d5ef5314dc4b439e77d7a8d4160001b613553565b612f138560030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b612f3f7ff4e567e7562911da39bffb81e288c8f975e497cd7150fccc6a2a2c68b5b9dafc60001b613553565b612f6b7ff8a191528b6fbe90d3cd26e4f22be7d31c75c8daab9998f0edb1d5b3d76bffba60001b613553565b6000612f756136f2565b60010160008881526020019081526020016000209050612fb77f640f3e9b22ce366c014d00c51198c0de837fcf06eb277dbe91c84f5a39727d5d60001b613553565b612fe37ff2a398dec87ced93ae3cbba671a8c4ce313b9d755fd551aade15e3a16e1e6ecb60001b613553565b8c81600001819055506130187f33e7fa782ec497815c75df409203e9e3a69200f4e1fa55b64da4d0f264f3dffb60001b613553565b6130447f603f4be081dabe4238dd480b37be18ef710d8e18c3469e52c0a6ddab00a8a61c60001b613553565b8b81600101819055506130797fbf288863ca6fddd32e879f4b79bd4dd425c392a5fcef5f983f8f08e1ef605b5060001b613553565b6130a57ff2a177ad06ef67b9717f15fcf34cc70f340b3cc6d6f14bb593e821bf9b06501160001b613553565b8a81600201819055506130da7ffcd4deeacae774eaeb62042d1a9e4b0cec53e040646d9619f79593144a07591d60001b613553565b6131067fd0eb1c6e1a157f4ecce99b20ed040702d0b4fd4b8cb95fb2fea84c089bfe3ea560001b613553565b89816003018190555061313b7fcfe1f9dd13cf2d9b481193f3cc530b6b1a8de05ccdd7d3924422faca7f18186260001b613553565b6131677fe545a543d3c586e2ab33ab06aa56cd973639d8eb2c241a55718cc08e064a9ea460001b613553565b88816004018190555061319c7f432f09bf2bbb2cfa048f0ac7c4f99231c483765887abc3c25dad6772b7f01b6d60001b613553565b6131c87fcb43f8134b94ad527bea6b907ab1a5290e282ab5ddd2a6f18f172b4d5f36e2a260001b613553565b848160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132377f14faaeb3648c1d505407846e7c6b7679b19e9b2dc90e1d9097c5e2ae73aec88060001b613553565b6132637f60fcde9fb8e94a807ecff08d1f13c7c512e0331b52f71232068523e29dcab0bc60001b613553565b868573ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a3505050505050979650505050505050565b60006132c2614618565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613395575061339485336132b8565b5b6133d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cb90617110565b60405180910390fd5b6133e233868686868661493f565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613450906178c6565b60405180910390fd5b613461614618565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b50565b60006135847f0fabcbadc4a10086619fdc1814df79dd4a107858f209f6d947174c48415bc30e60001b614645565b6135b07ff97eaa9356f2efcb5cb2effd46690d592ef2728f57d91a5d700a0e7160a8610f60001b614645565b6135dc7f91a20df0ed4ea76380ecab21b298646da37e59f23eabc0cba603b696f95fc95260001b614645565b60186000369050101580156135f657506135f5336117ba565b5b15613662576136277f9ce1aee594fa4a6ffea26291bd008baa8acfcecc91d62a5d1ad6f3dc69f1ae6860001b614645565b6136537f50849634e83f066fd0501cde170910f86107f0b23bd24d8ce1e297ffe212663960001b614645565b601436033560601c90506136ee565b61368e7fe0cdb04f9080e90b216f114284e970caeb1e86018be111e6ac076ec090965af160001b614645565b6136ba7fca7dcfacd32360eedca4bf35c474c6d2fe16fc049ebbc937fa5eb0cc2c64408560001b614645565b6136e67fcb673a6e911fca4f124234d139cf95e7fdec288e65dee5432335cf18e818103060001b614645565b3390506136ef565b5b90565b60006137207f5ce04ef2e9f839031f089bd076ce06e9b896a48675dc51b63cb4955c3d885e1e60001b614963565b61374c7fb5b59fb0f64986a01f06090b75f111e3919ff48e63ec85a92653657f361588ad60001b614963565b6137787f0e132ebeed99e77224bc55e57d440fd757f061699bad2ef5eff0f181fc8c93c760001b614963565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506137c97f457b16e77325cb925460189c13afe8380ab16f405ec2ae94094a29ef747143d260001b614963565b8091505090565b600081600001549050919050565b6000816040516020016137f1919061795d565b604051602081830303815290604052805190602001209050919050565b600080600061381d8585614966565b9150915061382a816149e7565b819250505092915050565b60006138637f621434c9fd2e8bba0ec1e8665c6852f4a9919372e89bb045ed4a46aee0a51fe460001b614bb3565b61388f7f563cb72bde513957c46c4fa0753bb9816050c133ed604584517c0f39a73e4eed60001b614bb3565b6138bb7f7f53722e1ed3903aa24ee1e622ad9a65b4217ee614f3685b860a52a8be9fc95760001b614bb3565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061390c7f3e1bdcbbbb16eabd821040291754918d2051e700c9a0133e121019f9de911ecd60001b614bb3565b8091505090565b60006139417f72efb1d40a976cae6eeae9e878b7b30d9a49a5cdd1ab47a739590880a294cec460001b613553565b61396d7fcf169b6a538dc0f6c0102feed0b37c54f672f3e681b5269dc99961f7c9801c3160001b613553565b6139997f2725c06dd82edbad3f9b872af6a16699bd282780be9bd922071dcbfbc52d295d60001b613553565b60006139a36136f2565b600101600086815260200190815260200160002090506139e57fed84f1a88251221452e61da921c1b9d7ed5b46b3d7f38adc2124217f80b4c05760001b613553565b613a117fa02fa8de6f13ca3baee48e7c621a464e34de7768755a1eba6dbb3f1e786891ce60001b613553565b613a3d7f9b07797a0047f1a2b2e4b7a9979a95d9fbb015f879b00e6d4a4a29469d3c58a560001b613553565b8381600601548260030154613a5291906175bc565b1015613a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8a906179cf565b60405180910390fd5b613abf7fcb40fa9eaab8061dabc4c511b9a94536ef501a174ee019c004a607ae8995185260001b613553565b613aeb7f66645bdcce296b125239319745699d993d6c819d43cdba8b5590e076b35817d260001b613553565b613b177f3814e112ad9231e1448ae67c1ba054d8935915728027d055249ab3a2874aa50d60001b613553565b613b437fc359b819cbf6abc9ffff042968bc9144b1b770bb16b8bb72111bcdd780cab06260001b613553565b806000015442118015613b5a575080600101544211155b613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090617a3b565b60405180910390fd5b613bc57fd294e1e74386a0df78f440313618ed73a03640b6d18e09da6f8c2131ad6384ff60001b613553565b613bf17f6f3a1b072b7cbcf96b8f486bc4f40e0a89db93f534dfcdc169a1900be3f4a1bb60001b613553565b613c1d7f2f1086299e035b64320074596a23768d4815ee96be84e80201eaeeb3188328a860001b613553565b613c497ffcc15ab5433ff92b3f86fbd6208ea4fd592f1d4ba1924a0902df190106170c0b60001b613553565b838160020154613c599190617562565b3414613c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9190617aa7565b60405180910390fd5b613cc67fec7aa35ac4c5d18865f9724057d532be47be3a3abfea493997833eb77ee599ba60001b613553565b613cf27fa81469beb7e3ae07c5eaf3902ff05920d276e1048c7d7e79678047abc5b2acdd60001b613553565b613d1e7fb5580bda63201eef46e1894f3354ae8234048c14ff0ab480eec3f030a4acbb6660001b613553565b83816006016000828254613d3291906174f1565b92505081905550613d657fd52882e36a1ad9ab5b750c4e7d191b0f1a855d2822c7a8070536389830309cdc60001b613553565b613d917fdfa403db413f5fba67cca52f1fb76479f1fd13a498328f86d6d0336db0ddfea760001b613553565b613dda8160070160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614929565b613e067f9e3bf88b4b5b6e504bc0b1b1310177ddc269a736f56bf73cc454088a54cb652460001b613553565b613e327fdb225c249b2e49c927b2a9d5ec1e9df5d04653a4e58125e4c69a75d46d4eab2b60001b613553565b613e4d83868660405180602001604052806000815250614bb6565b613e797f733caed6c410a8451c0bdd5a388c38a8bb22d226a1d58d6b2ad3be0f405d28fe60001b613553565b613ea57fc23e2a994cddb2835043be74384867ad8dd5eeea927ea7e5180208f983a9b29460001b613553565b60008160020154111561415257613ede7fc47bae03022c822ca2c6d9ca6d452c01eee2598acd60dbd76dd5ade7f00d37f660001b613553565b613f0a7fb71ae19af149b322d2bf51ad08027d1f67e589ddf89b71ed620aa0dd59aceb7660001b613553565b613f367f0457c7f73790240af84972ff8a82b68559af57f3f8a9dbf5c2e53ed03dd2907260001b613553565b60006064826004015434613f4a9190617562565b613f54919061746a565b9050613f827feec6d14385b21131966c80c452d808575f399b22e069110a60e09be7fb4a07a760001b613553565b613fae7f5d7cf90e8b67ffda5c86f2490eff2429c07d179d3d4a0d21e8b92d0b7a479a0260001b613553565b60008134613fbc91906175bc565b9050613fea7fb3513e574992c008466e9b30a8a6dcc4050e1570090ce65a8455b3c0117fdd5660001b613553565b6140167f68b96afc572ef1dfd8edba56f833f5841092fce6210d283eac03413c8df37aea60001b613553565b8260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614080573d6000803e3d6000fd5b506140ad7fbfa50c3de55e4441031b004d9472d9f431265501bc9cc2701ae2de73c8c020fd60001b613553565b6140d97fdfbe64df54971a58fd9cf29bf8da9241ca863845e2377fd7b88f8a19132d86db60001b613553565b6140e1613835565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561414a573d6000803e3d6000fd5b50505061417f565b61417e7fb45b90fd42a7ff2d68678a574cbec27dad17991519a6567b045aa604418423b660001b613553565b5b6141ab7f0d031380eb99469c9a9b657726f4b0b7eb51c1c9c87aa69acb27c14d86b44bf560001b613553565b6141d77f1de7d8267f4f82897b0b046701c263241bf2e099fd317b8e91e44fec0627fd1760001b613553565b83858473ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142487f12fcb7150f41d198cc560721d9fe4a8b9b9675b3c97296f71de583b19f20905f60001b613553565b6142747f51c910e3280240a9da13a26a918f1bdee1b640ef3f81c307a8181a8b85b8b51c60001b613553565b60019150509392505050565b50565b60006142b17f37178690aaa1dfd0c6c3d44a41adbe336ddf4e47b2b013705f748d17f953a4f960001b614bd7565b6142dd7fb61c1cab06bcac74cb6fcec39279be9822daecce53b0d226a7f55aaa4694a84160001b614bd7565b6143097f390cbf5b98e53b9eb14b6ef693414cb3bd075af27cf444b8236e59e0e311394260001b614bd7565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905061435a7f2e97ffd5dadbc67c0d3ba2581f455f642621064ef90f5a7cfc10aed47737e18660001b614bd7565b8091505090565b600061438f7fc12b04ea53e4473ef466818b7c8c94c90f6bd77205d7c9b82f6a5d4de196a6a960001b614bda565b6143bb7f89a1f54751c7a873ff3e8896571a78db56811d12ddf8d5d28efd5aa5386e903760001b614bda565b6143e77fdedee73f76c7a07a4b418b59e38145ca6423d0815832d433528f8a1d7b01551a60001b614bda565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390506144387f47b0161d8c57ec0e65647be2a620071b1a78d3a9606f10c9cd43c92ffe7741da60001b614bda565b8091505090565b61446b7f431bc7f452809a3732c5c1a0b6c51dcd24cd363bf1f82908d52d72546076378460001b6144e6565b6144977f52240686f143432fc52d707de7b9ed833ae7ca5093172522026947ac54409f8760001b6144e6565b6144c37f7327e968d0500ce8cdfbfe0fdf076e04cd8669b4e88c690338cd4426d8446aba60001b6144e6565b806144cc6144e9565b60010190805190602001906144e2929190615e8f565b5050565b50565b60006145177fa9f6d638cb34cb261597ae232ca47e1e05373b83d270d71d783851218479d26560001b614bdd565b6145437fb459fc962a4b7a702eeba11b454e002d1e5fe7f2f71ac0249e476d78be45e16e60001b614bdd565b61456f7f373e0f10c4bbfcba941e9d7478208b12b2e79e04105738322bffaa27a05a837260001b614bdd565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390506145c07f3b7a75e893a3d4e113ca24a01863558add93663b17f32ee1a0d99b5a4d4f7c1060001b614bdd565b8091505090565b60006145ed6145d4614be0565b6001016000848152602001908152602001600020614c0d565b9050919050565b614602868686868686614c22565b614610868686868686614f27565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b50565b60606000614654614be0565b60010160008481526020019081526020016000209050600061467582614c0d565b67ffffffffffffffff81111561468e5761468d61611a565b5b6040519080825280602002602001820160405280156146bc5781602001602082028036833780820191505090505b50905060005b6146cb83614c0d565b81101561473f576146e581846150fe90919063ffffffff16565b8282815181106146f8576146f76171c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506146c2565b508092505050919050565b60606000614756614be0565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006147a382615118565b67ffffffffffffffff8111156147bc576147bb61611a565b5b6040519080825280602002602001820160405280156147ea5781602001602082028036833780820191505090505b50905060005b6147f983615118565b81101561483f57614813818461512d90919063ffffffff16565b828281518110614826576148256171c2565b5b60200260200101818152505080806001019150506147f0565b508092505050919050565b6000614854614be0565b6000016000838152602001908152602001600020549050919050565b61489c7f714373bb2f2144c87b3e52bc60c4d5a7066b2e23d5bf408bcb9eaf24ccb9cf0260001b6144e6565b6148c87fa2db81b69fdf15a5c420c8ff9c6e3def280ef84cf31afa9558cd3f6c40b16f2660001b6144e6565b6148f47f0863a359a857d21a5d3981b95d1fc7d088b2420cf573ea197c0a39c7de02dd5760001b6144e6565b806148fd6144e9565b60000160008481526020019081526020016000209080519060200190614924929190615e8f565b505050565b6001816000016000828254019250508190555050565b61494d868686868686615147565b61495b8686868686866153be565b505050505050565b50565b60008060418351036149a75760008060006020860151925060408601519150606086015160001a905061499b87828585615595565b945094505050506149e0565b60408351036149d75760008060208501519150604085015190506149cc8683836156a1565b9350935050506149e0565b60006002915091505b9250929050565b600060048111156149fb576149fa617ac7565b5b816004811115614a0e57614a0d617ac7565b5b0315614bb05760016004811115614a2857614a27617ac7565b5b816004811115614a3b57614a3a617ac7565b5b03614a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a7290617b42565b60405180910390fd5b60026004811115614a8f57614a8e617ac7565b5b816004811115614aa257614aa1617ac7565b5b03614ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ad990617bae565b60405180910390fd5b60036004811115614af657614af5617ac7565b5b816004811115614b0957614b08617ac7565b5b03614b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b4090617c40565b60405180910390fd5b600480811115614b5c57614b5b617ac7565b5b816004811115614b6f57614b6e617ac7565b5b03614baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ba690617cd2565b60405180910390fd5b5b50565b50565b614bc284848484615700565b614bd1336000868686866153be565b50505050565b50565b50565b50565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614c1b82600001615883565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603614c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c8890617d64565b60405180910390fd5b8151835114614cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ccc90617df6565b60405180910390fd5b614ce3868686868686615894565b6000614ced614618565b600001905060005b8451811015614e9f576000858281518110614d1357614d126171c2565b5b602002602001015190506000858381518110614d3257614d316171c2565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614dca90617e88565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380600101945050508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614e9191906174f1565b925050819055505050614cf5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614f16929190617ea8565b60405180910390a450505050505050565b614f468473ffffffffffffffffffffffffffffffffffffffff166158aa565b156150f6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401614f8c959493929190617f34565b6020604051808303816000875af1925050508015614fc857506040513d601f19601f82011682018060405250810190614fc59190617fb1565b60015b61506d57614fd4617feb565b806308c379a0036150305750614fe861800d565b80614ff35750615032565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161502791906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150649061810f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146150f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150eb906181a1565b60405180910390fd5b505b505050505050565b600061510d83600001836158bd565b60001c905092915050565b600061512682600001615883565b9050919050565b600061513c83600001836158bd565b60001c905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036151b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151ad90617d64565b60405180910390fd5b6151d48686866151c587615931565b6151ce87615931565b86615894565b60006151de614618565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561527a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161527190617e88565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461533091906174f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516153ad9291906181c1565b60405180910390a450505050505050565b6153dd8473ffffffffffffffffffffffffffffffffffffffff166158aa565b1561558d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016154239594939291906181ea565b6020604051808303816000875af192505050801561545f57506040513d601f19601f8201168201806040525081019061545c9190617fb1565b60015b6155045761546b617feb565b806308c379a0036154c7575061547f61800d565b8061548a57506154c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154be91906164a1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154fb9061810f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461558b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615582906181a1565b60405180910390fd5b505b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156155d0576000600391509150615698565b601b8560ff16141580156155e85750601c8560ff1614155b156155fa576000600491509150615698565b60006001878787876040516000815260200160405260405161561f949392919061826f565b6020604051602081039080840390855afa158015615641573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361568f57600060019250925050615698565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6156e491906174f1565b90506156f287828885615595565b935093505050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361576f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161576690618326565b60405180910390fd5b61578e3360008661577f87615931565b61578887615931565b86615894565b81615797614618565b600001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546157f791906174f1565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516158759291906181c1565b60405180910390a450505050565b600081600001805490509050919050565b6158a28686868686866159ab565b505050505050565b600080823b905060008111915050919050565b600081836000018054905011615908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158ff906183b8565b60405180910390fd5b82600001828154811061591e5761591d6171c2565b5b9060005260206000200154905092915050565b60606000600167ffffffffffffffff8111156159505761594f61611a565b5b60405190808252806020026020018201604052801561597e5781602001602082028036833780820191505090505b5090508281600081518110615996576159956171c2565b5b60200260200101818152505080915050919050565b6159b98686868686866159c1565b505050505050565b6159cf868686868686615c72565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614615c6a576000615a0c614be0565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015615c64576000878281518110615ac157615ac06171c2565b5b602002602001015190506000811115615c56576000898381518110615ae957615ae86171c2565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603615b5857818760000160008381526020019081526020016000206000828254615b4c91906174f1565b92505081905550615ba3565b81615b638d836133e9565b03615ba257615b8c8c876000848152602001908152602001600020615c7a90919063ffffffff16565b50615ba08186615caa90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1603615c0857818760000160008381526020019081526020016000206000828254615bfc91906175bc565b92505081905550615c54565b6000615c148c836133e9565b03615c5357615c3d8b876000848152602001908152602001600020615cc490919063ffffffff16565b50615c518185615cf490919063ffffffff16565b505b5b505b818060010192505050615aa3565b50505050505b505050505050565b505050505050565b6000615ca2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615d0e565b905092915050565b6000615cbc836000018360001b615d0e565b905092915050565b6000615cec836000018373ffffffffffffffffffffffffffffffffffffffff1660001b615dfc565b905092915050565b6000615d06836000018360001b615dfc565b905092915050565b60008083600101600084815260200190815260200160002054905060008114615df057600084600001600186600001805490500381548110615d5357615d526171c2565b5b9060005260206000200154905080856000016001840381548110615d7a57615d796171c2565b5b906000526020600020018190555081856001016000838152602001908152602001600020819055505083600001805480615db757615db66183d8565b5b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050615df6565b60009150505b92915050565b6000615e088383615e6c565b615e61578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050615e66565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054615e9b90616f0d565b90600052602060002090601f016020900481019282615ebd5760008555615f04565b82601f10615ed657805160ff1916838001178555615f04565b82800160010185558215615f04579182015b82811115615f03578251825591602001919060010190615ee8565b5b509050615f119190615f15565b5090565b5b80821115615f2e576000816000905550600101615f16565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615f7182615f46565b9050919050565b615f8181615f66565b8114615f8c57600080fd5b50565b600081359050615f9e81615f78565b92915050565b6000819050919050565b615fb781615fa4565b8114615fc257600080fd5b50565b600081359050615fd481615fae565b92915050565b60008060408385031215615ff157615ff0615f3c565b5b6000615fff85828601615f8f565b925050602061601085828601615fc5565b9150509250929050565b61602381615fa4565b82525050565b600060208201905061603e600083018461601a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61607981616044565b811461608457600080fd5b50565b60008135905061609681616070565b92915050565b6000602082840312156160b2576160b1615f3c565b5b60006160c084828501616087565b91505092915050565b60008115159050919050565b6160de816160c9565b82525050565b60006020820190506160f960008301846160d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61615282616109565b810181811067ffffffffffffffff821117156161715761617061611a565b5b80604052505050565b6000616184615f32565b90506161908282616149565b919050565b600067ffffffffffffffff8211156161b0576161af61611a565b5b6161b982616109565b9050602081019050919050565b82818337600083830152505050565b60006161e86161e384616195565b61617a565b90508281526020810184848401111561620457616203616104565b5b61620f8482856161c6565b509392505050565b600082601f83011261622c5761622b6160ff565b5b813561623c8482602086016161d5565b91505092915050565b60008060006060848603121561625e5761625d615f3c565b5b600061626c86828701615fc5565b935050602061627d86828701615fc5565b925050604084013567ffffffffffffffff81111561629e5761629d615f41565b5b6162aa86828701616217565b9150509250925092565b600067ffffffffffffffff8211156162cf576162ce61611a565b5b6162d882616109565b9050602081019050919050565b60006162f86162f3846162b4565b61617a565b90508281526020810184848401111561631457616313616104565b5b61631f8482856161c6565b509392505050565b600082601f83011261633c5761633b6160ff565b5b813561634c8482602086016162e5565b91505092915050565b600080600080600060a0868803121561637157616370615f3c565b5b600086013567ffffffffffffffff81111561638f5761638e615f41565b5b61639b88828901616327565b95505060206163ac88828901615f8f565b94505060406163bd88828901615f8f565b93505060606163ce88828901615f8f565b92505060806163df88828901615f8f565b9150509295509295909350565b60006020828403121561640257616401615f3c565b5b600061641084828501615fc5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616453578082015181840152602081019050616438565b83811115616462576000848401525b50505050565b600061647382616419565b61647d8185616424565b935061648d818560208601616435565b61649681616109565b840191505092915050565b600060208201905081810360008301526164bb8184616468565b905092915050565b6000602082840312156164d9576164d8615f3c565b5b60006164e784828501615f8f565b91505092915050565b600067ffffffffffffffff82111561650b5761650a61611a565b5b602082029050602081019050919050565b600080fd5b600061653461652f846164f0565b61617a565b905080838252602082019050602084028301858111156165575761655661651c565b5b835b81811015616580578061656c8882615fc5565b845260208401935050602081019050616559565b5050509392505050565b600082601f83011261659f5761659e6160ff565b5b81356165af848260208601616521565b91505092915050565b600080600080600060a086880312156165d4576165d3615f3c565b5b60006165e288828901615f8f565b95505060206165f388828901615f8f565b945050604086013567ffffffffffffffff81111561661457616613615f41565b5b6166208882890161658a565b935050606086013567ffffffffffffffff81111561664157616640615f41565b5b61664d8882890161658a565b925050608086013567ffffffffffffffff81111561666e5761666d615f41565b5b61667a88828901616217565b9150509295509295909350565b61669081615f66565b82525050565b60006020820190506166ab6000830184616687565b92915050565b600067ffffffffffffffff8211156166cc576166cb61611a565b5b602082029050602081019050919050565b60006166f06166eb846166b1565b61617a565b905080838252602082019050602084028301858111156167135761671261651c565b5b835b8181101561673c57806167288882615f8f565b845260208401935050602081019050616715565b5050509392505050565b600082601f83011261675b5761675a6160ff565b5b813561676b8482602086016166dd565b91505092915050565b6000806040838503121561678b5761678a615f3c565b5b600083013567ffffffffffffffff8111156167a9576167a8615f41565b5b6167b585828601616746565b925050602083013567ffffffffffffffff8111156167d6576167d5615f41565b5b6167e28582860161658a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61682181615fa4565b82525050565b60006168338383616818565b60208301905092915050565b6000602082019050919050565b6000616857826167ec565b61686181856167f7565b935061686c83616808565b8060005b8381101561689d5781516168848882616827565b975061688f8361683f565b925050600181019050616870565b5085935050505092915050565b600060208201905081810360008301526168c4818461684c565b905092915050565b600060e0820190506168e1600083018a61601a565b6168ee602083018961601a565b6168fb604083018861601a565b616908606083018761601a565b616915608083018661601a565b61692260a0830185616687565b61692f60c083018461601a565b98975050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61697081615f66565b82525050565b60006169828383616967565b60208301905092915050565b6000602082019050919050565b60006169a68261693b565b6169b08185616946565b93506169bb83616957565b8060005b838110156169ec5781516169d38882616976565b97506169de8361698e565b9250506001810190506169bf565b5085935050505092915050565b60006020820190508181036000830152616a13818461699b565b905092915050565b600080fd5b60008083601f840112616a3657616a356160ff565b5b8235905067ffffffffffffffff811115616a5357616a52616a1b565b5b602083019150836020820283011115616a6f57616a6e61651c565b5b9250929050565b600080600060408486031215616a8f57616a8e615f3c565b5b600084013567ffffffffffffffff811115616aad57616aac615f41565b5b616ab986828701616a20565b9350935050602084013567ffffffffffffffff811115616adc57616adb615f41565b5b616ae886828701616217565b9150509250925092565b60008060408385031215616b0957616b08615f3c565b5b6000616b1785828601615fc5565b9250506020616b2885828601615f8f565b9150509250929050565b616b3b816160c9565b8114616b4657600080fd5b50565b600081359050616b5881616b32565b92915050565b60008060408385031215616b7557616b74615f3c565b5b6000616b8385828601615f8f565b9250506020616b9485828601616b49565b9150509250929050565b600080600080600080600060e0888a031215616bbd57616bbc615f3c565b5b600088013567ffffffffffffffff811115616bdb57616bda615f41565b5b616be78a828b01616327565b9750506020616bf88a828b01615fc5565b9650506040616c098a828b01615fc5565b9550506060616c1a8a828b01615fc5565b9450506080616c2b8a828b01615fc5565b93505060a0616c3c8a828b01615fc5565b92505060c088013567ffffffffffffffff811115616c5d57616c5c615f41565b5b616c698a828b01616217565b91505092959891949750929550565b60008060408385031215616c8f57616c8e615f3c565b5b6000616c9d85828601615f8f565b9250506020616cae85828601615f8f565b9150509250929050565b600080600080600060a08688031215616cd457616cd3615f3c565b5b6000616ce288828901615f8f565b9550506020616cf388828901615f8f565b9450506040616d0488828901615fc5565b9350506060616d1588828901615fc5565b925050608086013567ffffffffffffffff811115616d3657616d35615f41565b5b616d4288828901616217565b9150509295509295909350565b6000819050919050565b616d6a616d6582615fa4565b616d4f565b82525050565b60008160601b9050919050565b6000616d8882616d70565b9050919050565b6000616d9a82616d7d565b9050919050565b616db2616dad82615f66565b616d8f565b82525050565b6000616dc48287616d59565b602082019150616dd48286616d59565b602082019150616de48285616da1565b601482019150616df48284616d59565b60208201915081905095945050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000616e3c600283616424565b9150616e4782616e06565b602082019050919050565b60006020820190508181036000830152616e6b81616e2f565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000616ea8600283616424565b9150616eb382616e72565b602082019050919050565b60006020820190508181036000830152616ed781616e9b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680616f2557607f821691505b602082108103616f3857616f37616ede565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000616f74601d83616424565b9150616f7f82616f3e565b602082019050919050565b60006020820190508181036000830152616fa381616f67565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154616fd781616f0d565b616fe18186616faa565b94506001821660008114616ffc576001811461700d57617040565b60ff19831686528186019350617040565b61701685616fb5565b60005b8381101561703857815481890152600182019150602081019050617019565b838801955050505b50505092915050565b600061705482616419565b61705e8185616faa565b935061706e818560208601616435565b80840191505092915050565b60006170868285616fca565b91506170928284617049565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006170fa602983616424565b91506171058261709e565b604082019050919050565b60006020820190508181036000830152617129816170ed565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061718c602983616424565b915061719782617130565b604082019050919050565b600060208201905081810360008301526171bb8161717f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061724d603183616424565b9150617258826171f1565b604082019050919050565b6000602082019050818103600083015261727c81617240565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b60006172b9600383616424565b91506172c482617283565b602082019050919050565b600060208201905081810360008301526172e8816172ac565b9050919050565b7f4e43000000000000000000000000000000000000000000000000000000000000600082015250565b6000617325600283616424565b9150617330826172ef565b602082019050919050565b6000602082019050818103600083015261735481617318565b9050919050565b600081905092915050565b600080fd5b6000617377838561735b565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156173aa576173a9617366565b5b6020830292506173bb8385846161c6565b82840190509392505050565b60006173d482858761736b565b91506173e08284616da1565b601482019150819050949350505050565b60006173fd8284616da1565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061747582615fa4565b915061748083615fa4565b9250826174905761748f61740c565b5b828204905092915050565b60006174a682615f46565b9050919050565b60006174b882616d7d565b9050919050565b6174d06174cb8261749b565b6174ad565b82525050565b60006174e282846174bf565b60148201915081905092915050565b60006174fc82615fa4565b915061750783615fa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561753c5761753b61743b565b5b828201905092915050565b60006175538284616d59565b60208201915081905092915050565b600061756d82615fa4565b915061757883615fa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156175b1576175b061743b565b5b828202905092915050565b60006175c782615fa4565b91506175d283615fa4565b9250828210156175e5576175e461743b565b5b828203905092915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061764c602983616424565b9150617657826175f0565b604082019050919050565b6000602082019050818103600083015261767b8161763f565b9050919050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006176b8600283616424565b91506176c382617682565b602082019050919050565b600060208201905081810360008301526176e7816176ab565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617724600383616424565b915061772f826176ee565b602082019050919050565b6000602082019050818103600083015261775381617717565b9050919050565b7f4941430000000000000000000000000000000000000000000000000000000000600082015250565b6000617790600383616424565b915061779b8261775a565b602082019050919050565b600060208201905081810360008301526177bf81617783565b9050919050565b60006177d2828b617049565b91506177de828a616d59565b6020820191506177ee8289616d59565b6020820191506177fe8288616d59565b60208201915061780e8287616d59565b60208201915061781e8286616d59565b60208201915061782e8285616da1565b60148201915061783e8284616d59565b6020820191508190509998505050505050505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006178b0602b83616424565b91506178bb82617854565b604082019050919050565b600060208201905081810360008301526178df816178a3565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061791c601c83616faa565b9150617927826178e6565b601c82019050919050565b6000819050919050565b6000819050919050565b61795761795282617932565b61793c565b82525050565b60006179688261790f565b91506179748284617946565b60208201915081905092915050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179b9600283616424565b91506179c482617983565b602082019050919050565b600060208201905081810360008301526179e8816179ac565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a25600383616424565b9150617a30826179ef565b602082019050919050565b60006020820190508181036000830152617a5481617a18565b9050919050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617a91600283616424565b9150617a9c82617a5b565b602082019050919050565b60006020820190508181036000830152617ac081617a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617b2c601883616424565b9150617b3782617af6565b602082019050919050565b60006020820190508181036000830152617b5b81617b1f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617b98601f83616424565b9150617ba382617b62565b602082019050919050565b60006020820190508181036000830152617bc781617b8b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617c2a602283616424565b9150617c3582617bce565b604082019050919050565b60006020820190508181036000830152617c5981617c1d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617cbc602283616424565b9150617cc782617c60565b604082019050919050565b60006020820190508181036000830152617ceb81617caf565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000617d4e602583616424565b9150617d5982617cf2565b604082019050919050565b60006020820190508181036000830152617d7d81617d41565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000617de0602883616424565b9150617deb82617d84565b604082019050919050565b60006020820190508181036000830152617e0f81617dd3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000617e72602b83616424565b9150617e7d82617e16565b604082019050919050565b60006020820190508181036000830152617ea181617e65565b9050919050565b60006040820190508181036000830152617ec2818561684c565b90508181036020830152617ed6818461684c565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000617f0682617edf565b617f108185617eea565b9350617f20818560208601616435565b617f2981616109565b840191505092915050565b600060a082019050617f496000830188616687565b617f566020830187616687565b8181036040830152617f68818661684c565b90508181036060830152617f7c818561684c565b90508181036080830152617f908184617efb565b90509695505050505050565b600081519050617fab81616070565b92915050565b600060208284031215617fc757617fc6615f3c565b5b6000617fd584828501617f9c565b91505092915050565b60008160e01c9050919050565b600060033d111561800a5760046000803e618007600051617fde565b90505b90565b600060443d1061809a5761801f615f32565b60043d036004823e80513d602482011167ffffffffffffffff8211171561804757505061809a565b808201805167ffffffffffffffff811115618065575050505061809a565b80602083010160043d03850181111561808257505050505061809a565b61809182602001850186616149565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006180f9603483616424565b91506181048261809d565b604082019050919050565b60006020820190508181036000830152618128816180ec565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061818b602883616424565b91506181968261812f565b604082019050919050565b600060208201905081810360008301526181ba8161817e565b9050919050565b60006040820190506181d6600083018561601a565b6181e3602083018461601a565b9392505050565b600060a0820190506181ff6000830188616687565b61820c6020830187616687565b618219604083018661601a565b618226606083018561601a565b81810360808301526182388184617efb565b90509695505050505050565b61824d81617932565b82525050565b600060ff82169050919050565b61826981618253565b82525050565b60006080820190506182846000830187618244565b6182916020830186618260565b61829e6040830185618244565b6182ab6060830184618244565b95945050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618310602183616424565b915061831b826182b4565b604082019050919050565b6000602082019050818103600083015261833f81618303565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006183a2602283616424565b91506183ad82618346565b604082019050919050565b600060208201905081810360008301526183d181618395565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201c4ce066b615d7caca183cbae6237b2bec98ecae82fc9f9b50fd1e2c957f531464736f6c634300080d0033"; type CyberObjectFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts b/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts index b3bb121..2e6a4b3 100644 --- a/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts @@ -535,7 +535,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50612c50806100206000396000f3fe608060405234801561001057600080fd5b50600436106101355760003560e01c80634e1273f4116100b2578063a22cb46511610081578063bd85b03911610066578063bd85b03914610367578063e985e9c51461037a578063f242432a146103e257600080fd5b8063a22cb46514610317578063bc01188e1461032a57600080fd5b80634e1273f414610276578063572b6c05146102965780636dcfd841146102e457806385bff2e71461030457600080fd5b806313ba55df116101095780631b023947116100ee5780631b023947146101f25780632eb2c2d614610205578063481c6a751461021857600080fd5b806313ba55df146101b857806318160ddd146101cb57600080fd5b8062fdd58e1461013a57806301ffc9a7146101605780630b885ac3146101835780630e89341c14610198575b600080fd5b61014d6101483660046121e1565b6103f5565b6040519081526020015b60405180910390f35b61017361016e36600461223c565b61040a565b6040519015158152602001610157565b610196610191366004612356565b610463565b005b6101ab6101a63660046123ea565b6106c6565b604051610157919061247d565b61014d6101c63660046123ea565b610838565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a605461014d565b61014d610200366004612490565b610843565b610196610213366004612560565b61088d565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610157565b61028961028436600461260a565b6109a1565b6040516101579190612710565b6101736102a4366004612490565b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9935473ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102f76102f23660046123ea565b610c30565b6040516101579190612723565b610289610312366004612490565b610c3b565b61019661032536600461277d565b610c46565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a625473ffffffffffffffffffffffffffffffffffffffff16610251565b61014d6103753660046123ea565b610da1565b6101736103883660046127b9565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832093909416825291909152205460ff1690565b6101966103f03660046127ec565b610dd4565b60006104018383610ee1565b90505b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604081205460ff16610404565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4e4f00000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b7fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fd9b67a26000000000000000000000000000000000000000000000000000000006000527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f845f7f8d885943dffdc1524acbd9538b2923f93aad26d306df3b8982c7f0632d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561060285610fda565b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5f8054938616938216939093179092557f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a628054919094169116179091555050565b60008181527fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c83602052604081208054606092919061070390612851565b80601f016020809104026020016040519081016040528092919081815260200182805461072f90612851565b801561077c5780601f106107515761010080835404028352916020019161077c565b820191906000526020600020905b81548152906001019060200180831161075f57829003601f168201915b5050505050905080516000036107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f455243313135355552493a20746f6b656e4964206e6f7420657869737400000060448201526064016104ff565b604051610821907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c849083906020016128c0565b604051602081830303815290604052915050919050565b600061040482611010565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a616020526040812054610404565b73ffffffffffffffffffffffffffffffffffffffff8516331480610900575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016104ff565b61099a338686868686611046565b5050505050565b60608151835114610a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104ff565b82517f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b9060009067ffffffffffffffff811115610a7357610a73612260565b604051908082528060200260200182016040528015610a9c578160200160208202803683370190505b50905060005b8551811015610c2757600073ffffffffffffffffffffffffffffffffffffffff16868281518110610ad557610ad561299d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016104ff565b826000868381518110610b9557610b9561299d565b602002602001015181526020019081526020016000206000878381518110610bbf57610bbf61299d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610c1457610c1461299d565b6020908102919091010152600101610aa2565b50949350505050565b60606104048261106a565b60606104048261114b565b73ffffffffffffffffffffffffffffffffffffffff82163303610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104ff565b3360008181527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea6020526040812054610404565b73ffffffffffffffffffffffffffffffffffffffff8516331480610e47575073ffffffffffffffffffffffffffffffffffffffff851660009081527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68c6020908152604080832033845290915290205460ff165b610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016104ff565b61099a338686868686611221565b600073ffffffffffffffffffffffffffffffffffffffff8316610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016104ff565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff95909516845293905250205490565b805161100c907fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8490602084019061211f565b5050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206104049061123d565b611054868686868686611247565b61106286868686868661159d565b505050505050565b60008181527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb602052604081206060916110a38261123d565b67ffffffffffffffff8111156110bb576110bb612260565b6040519080825280602002602001820160405280156110e4578160200160208202803683370190505b50905060005b6110f38361123d565b811015611143576111048382611830565b8282815181106111165761111661299d565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016110ea565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040812060609161119b8261123d565b67ffffffffffffffff8111156111b3576111b3612260565b6040519080825280602002602001820160405280156111dc578160200160208202803683370190505b50905060005b6111eb8361123d565b811015611143576111fc8382611830565b82828151811061120e5761120e61299d565b60209081029190910101526001016111e2565b61122f86868686868661183c565b611062868686868686611a85565b6000610404825490565b73ffffffffffffffffffffffffffffffffffffffff84166112ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104ff565b815183511461137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104ff565b611389868686868686611c32565b7f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b60005b84518110156115155760008582815181106113ca576113ca61299d565b6020026020010151905060008583815181106113e8576113e861299d565b6020908102919091018101516000848152868352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156114b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016104ff565b60008381526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320938590039093558a1681529081208054600195909501948392906115089084906129fb565b909155506113ad92505050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161158c929190612a13565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611062576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c81906116149089908990889088908890600401612a38565b6020604051808303816000875af192505050801561166d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261166a91810190612aa3565b60015b61175657611679612ac0565b806308c379a0036116cc575061168d612adc565b8061169857506116ce565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ff919061247d565b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104ff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104ff565b50505050505050565b60006104018383611c40565b73ffffffffffffffffffffffffffffffffffffffff84166118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104ff565b6118fd8686866118ee87611cfb565b6118f787611cfb565b86611c32565b60008381527f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b6020818152604080842073ffffffffffffffffffffffffffffffffffffffff8a16855290915290912054838110156119dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243313135353a20696e73756666696369656e742062616c616e636573206660448201527f6f72207472616e7366657200000000000000000000000000000000000000000060648201526084016104ff565b60008581526020838152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093879003909355871681529081208054859290611a299084906129fb565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff8088169289821692918b16917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910161158c565b73ffffffffffffffffffffffffffffffffffffffff84163b15611062576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611afc9089908990889088908890600401612b84565b6020604051808303816000875af1925050508015611b55575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611b5291810190612aa3565b60015b611b6157611679612ac0565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104ff565b611062868686868686611d46565b81546000908210611cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016104ff565b826000018281548110611ce857611ce861299d565b9060005260206000200154905092915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d3557611d3561299d565b602090810291909101015292915050565b6110628686868686868373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146110625773ffffffffffffffffffffffffffffffffffffffff85811660009081527fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ec6020526040808220928716825281207fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea927fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424eb929091905b8751811015611f7c576000878281518110611e3457611e3461299d565b602002602001015190506000811115611f73576000898381518110611e5b57611e5b61299d565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603611ec25760008181526020889052604081208054849290611eb79084906129fb565b90915550611ef79050565b81611ecd8d83610ee1565b03611ef7576000818152602087905260409020611eea908d611f89565b50611ef58582611fab565b505b73ffffffffffffffffffffffffffffffffffffffff8b16611f3b5760008181526020889052604081208054849290611f30908490612bd4565b90915550611f719050565b611f458b82610ee1565b600003611f71576000818152602087905260409020611f64908c611fb7565b50611f6f8482611fd9565b505b505b50600101611e17565b5050505050505050505050565b60006104018373ffffffffffffffffffffffffffffffffffffffff8416611fe5565b60006104018383611fe5565b60006104018373ffffffffffffffffffffffffffffffffffffffff84166120d0565b600061040183836120d0565b600081815260018301602052604081205480156120c657835460009085907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106120355761203561299d565b906000526020600020015490508085600001600184038154811061205b5761205b61299d565b600091825260208083209091019290925591825260018601905260409020819055835484908061208d5761208d612beb565b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050610404565b6000915050610404565b600081815260018301602052604081205461211757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610404565b506000610404565b82805461212b90612851565b90600052602060002090601f01602090048101928261214d5760008555612193565b82601f1061216657805160ff1916838001178555612193565b82800160010185558215612193579182015b82811115612193578251825591602001919060010190612178565b5061219f9291506121a3565b5090565b5b8082111561219f57600081556001016121a4565b803573ffffffffffffffffffffffffffffffffffffffff811681146121dc57600080fd5b919050565b600080604083850312156121f457600080fd5b6121fd836121b8565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461223957600080fd5b50565b60006020828403121561224e57600080fd5b81356122598161220b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156122d3576122d3612260565b6040525050565b600067ffffffffffffffff8311156122f4576122f4612260565b60405161232960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116018261228f565b80915083815284848401111561233e57600080fd5b83836020830137600060208583010152509392505050565b600080600080600060a0868803121561236e57600080fd5b853567ffffffffffffffff81111561238557600080fd5b8601601f8101881361239657600080fd5b6123a5888235602084016122da565b9550506123b4602087016121b8565b93506123c2604087016121b8565b92506123d0606087016121b8565b91506123de608087016121b8565b90509295509295909350565b6000602082840312156123fc57600080fd5b5035919050565b60005b8381101561241e578181015183820152602001612406565b8381111561242d576000848401525b50505050565b6000815180845261244b816020860160208601612403565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104016020830184612433565b6000602082840312156124a257600080fd5b610401826121b8565b600067ffffffffffffffff8211156124c5576124c5612260565b5060051b60200190565b600082601f8301126124e057600080fd5b813560206124ed826124ab565b6040516124fa828261228f565b83815260059390931b850182019282810191508684111561251a57600080fd5b8286015b84811015612535578035835291830191830161251e565b509695505050505050565b600082601f83011261255157600080fd5b610401838335602085016122da565b600080600080600060a0868803121561257857600080fd5b612581866121b8565b945061258f602087016121b8565b9350604086013567ffffffffffffffff808211156125ac57600080fd5b6125b889838a016124cf565b945060608801359150808211156125ce57600080fd5b6125da89838a016124cf565b935060808801359150808211156125f057600080fd5b506125fd88828901612540565b9150509295509295909350565b6000806040838503121561261d57600080fd5b823567ffffffffffffffff8082111561263557600080fd5b818501915085601f83011261264957600080fd5b81356020612656826124ab565b604051612663828261228f565b83815260059390931b850182019282810191508984111561268357600080fd5b948201945b838610156126a857612699866121b8565b82529482019490820190612688565b965050860135925050808211156126be57600080fd5b506126cb858286016124cf565b9150509250929050565b600081518084526020808501945080840160005b83811015612705578151875295820195908201906001016126e9565b509495945050505050565b60208152600061040160208301846126d5565b6020808252825182820181905260009190848201906040850190845b8181101561277157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161273f565b50909695505050505050565b6000806040838503121561279057600080fd5b612799836121b8565b9150602083013580151581146127ae57600080fd5b809150509250929050565b600080604083850312156127cc57600080fd5b6127d5836121b8565b91506127e3602084016121b8565b90509250929050565b600080600080600060a0868803121561280457600080fd5b61280d866121b8565b945061281b602087016121b8565b93506040860135925060608601359150608086013567ffffffffffffffff81111561284557600080fd5b6125fd88828901612540565b600181811c9082168061286557607f821691505b60208210810361289e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081516128b6818560208601612403565b9290920192915050565b600080845481600182811c9150808316806128dc57607f831692505b60208084108203612914577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612928576001811461295757612984565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612984565b60008b81526020902060005b8681101561297c5781548b820152908501908301612963565b505084890196505b50505050505061299481856128a4565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612a0e57612a0e6129cc565b500190565b604081526000612a2660408301856126d5565b828103602084015261299481856126d5565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152612a7160a08301866126d5565b8281036060840152612a8381866126d5565b90508281036080840152612a978185612433565b98975050505050505050565b600060208284031215612ab557600080fd5b81516122598161220b565b600060033d1115612ad95760046000803e5060005160e01c5b90565b600060443d1015612aea5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715612b3857505050505090565b8285019150815181811115612b505750505050505090565b843d8701016020828501011115612b6a5750505050505090565b612b796020828601018761228f565b509095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612bc960a0830184612433565b979650505050505050565b600082821015612be657612be66129cc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212206e0552211f777ac98f77e81e30d6f5a693bbcd5a8f075e7b7134d80617f9d87064736f6c634300080d0033"; + "0x608060405234801561001057600080fd5b506145ee806100206000396000f3fe608060405234801561001057600080fd5b50600436106101355760003560e01c80634e1273f4116100b2578063a22cb46511610081578063bd85b03911610066578063bd85b03914610398578063e985e9c5146103c8578063f242432a146103f857610135565b8063a22cb4651461035e578063bc01188e1461037a57610135565b80634e1273f41461029e578063572b6c05146102ce5780636dcfd841146102fe57806385bff2e71461032e57610135565b806313ba55df116101095780631b023947116100ee5780631b023947146102345780632eb2c2d614610264578063481c6a751461028057610135565b806313ba55df146101e657806318160ddd1461021657610135565b8062fdd58e1461013a57806301ffc9a71461016a5780630b885ac31461019a5780630e89341c146101b6575b600080fd5b610154600480360381019061014f9190612f11565b610414565b6040516101619190612f60565b60405180910390f35b610184600480360381019061017f9190612fd3565b610428565b604051610191919061301b565b60405180910390f35b6101b460048036038101906101af919061317c565b61044b565b005b6101d060048036038101906101cb9190613213565b61099b565b6040516101dd91906132c8565b60405180910390f35b61020060048036038101906101fb9190613213565b610c4a565b60405161020d9190612f60565b60405180910390f35b61021e610c5c565b60405161022b9190612f60565b60405180910390f35b61024e600480360381019061024991906132ea565b610cfa565b60405161025b9190612f60565b60405180910390f35b61027e60048036038101906102799190613480565b610dd7565b005b610288610e6b565b604051610295919061355e565b60405180910390f35b6102b860048036038101906102b3919061363c565b610f22565b6040516102c59190613772565b60405180910390f35b6102e860048036038101906102e391906132ea565b611116565b6040516102f5919061301b565b60405180910390f35b61031860048036038101906103139190613213565b6111fd565b6040516103259190613852565b60405180910390f35b610348600480360381019061034391906132ea565b61120f565b6040516103559190613772565b60405180910390f35b610378600480360381019061037391906138a0565b611221565b005b610382611395565b60405161038f919061355e565b60405180910390f35b6103b260048036038101906103ad9190613213565b61144c565b6040516103bf9190612f60565b60405180910390f35b6103e260048036038101906103dd91906138e0565b61145e565b6040516103ef919061301b565b60405180910390f35b610412600480360381019061040d9190613920565b6114fb565b005b6000610420838361158f565b905092915050565b600061044482610436611661565b61168e90919063ffffffff16565b9050919050565b6104777f1e4f3db61d02d43f745245c64298d7f0c1a3e8708559b6670d4ca42c54514f4460001b6116f9565b6104a37f0ac4986fe6d4c3895c8ef5e03bf2b121d82e6cf32614c4c5189671928b98f8e360001b6116f9565b6104cf7f145960e0b8e54656e42c3b088b3a10b57bf051eb1c4bb726aa3f9ccfaa056f1c60001b6116f9565b6104fb7f901a5d83ad9e5900a26fb984a5a99dc96974734dd64371311e5ca412033f4aa560001b6116f9565b3373ffffffffffffffffffffffffffffffffffffffff1661051a6116fc565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058b90613a03565b60405180910390fd5b6105c07fb7cd82f2e96c1e329917e6a6f329bab37f4868e3a34f88a3ae05f88fe1899b6e60001b6116f9565b6105ec7fb5ae9824ef1c4b9d1c19baecf68dbac5d61b7d6069bf88af80ad92642241b4d260001b6116f9565b6106187ff115cefef55a500dd4e6296e9a3d6cc0e8dc3d6712feb6c7f9f051ca69614aa860001b6116f9565b826106216117da565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061068e7fd72402da254f9ba5a463e2015cebe357527e12a62cd25ecae2e2921778ddc3cb60001b6116f9565b6106ba7f543c25cfe85aa6f8c53e60eaa7f95103d121790ecad586cf733b8a8818b76f7960001b6116f9565b60016106c46116fc565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506107797f18d24b611c0380c8df6354eea02a5a82d3b36fea45384921c977b440fbbeae9f60001b6116f9565b6107a57fe0a44e89e5938bc342f25b353520510937291eb9dcca1342977aa3ec3eda8fc060001b6116f9565b6107ae856118b8565b6107da7fc7c1929af15c5b3153f6eeb8ca93a8874a8cc881a6d885786447b173c210d63460001b6116f9565b6108067f720f9f9246e75a85b11fea637347797614847368b50cbf3d6962eb4bff9a58bf60001b6116f9565b8361080f61195f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061087c7f42fa96a8febb97c55f95796d3fb0d21c410d5ab5adf4ace2d87a196cc4dc3f9760001b6116f9565b6108a87fd44b3d45ab725ff9a331429e51865d518e4343c4f6bcdfeeca70765aa2ee70eb60001b6116f9565b816108b161195f565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061091e7f1eb6094a4ff364bc1205590533550d7e1d18bb4fc33971eb49a6c38f5c349b1d60001b6116f9565b61094a7fd671a9abc380ff64132a5a282180f649887bc6379ff36cf2c62463e383d3749b60001b6116f9565b8061095361195f565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606109c97f1c3b8ce455b2ad4634a6bde830f371ccaa9a60a47f7530d5559c60059ac6796360001b611a3d565b6109f57f744faa1a7f641981fd5340120b41026f6255d60e762e83a56d1f5e25ace615c060001b611a3d565b610a217f7ddf9d337eeac748c812ff0c191bca0bd9ad27c607ff6276c26efb1d10350ff960001b611a3d565b6000610a2b611a40565b60000160008481526020019081526020016000208054610a4a90613a52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7690613a52565b8015610ac35780601f10610a9857610100808354040283529160200191610ac3565b820191906000526020600020905b815481529060010190602001808311610aa657829003601f168201915b50505050509050610af67f31479a340477a3cd3ddd8874968c9b56fbb69a24bd62655bb14254f5e8b6b66f60001b611a3d565b610b227fb07081f26262d7615671a199ff1ec98be27284b5bbb83db432041ec57553afce60001b611a3d565b610b4e7f6f3823429822313601553d8d17013e3cb264da9b810dc4d78587e834dde5ca1060001b611a3d565b6000815103610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613acf565b60405180910390fd5b610bbe7f0758b40c742a6fadcdad3a342e6f0185a043afcf936f6a1f430cfe0a2895409f60001b611a3d565b610bea7fd00b5f2990c6e433c54a778edb076d4dd783ae43a208d2bd579c3e8b8fec22ff60001b611a3d565b610c167fac6e807513b0bd038c04f48a60fcaa1ca589bda2965c00a45f99327340337f7060001b611a3d565b610c1e611a40565b60010181604051602001610c33929190613bbf565b604051602081830303815290604052915050919050565b6000610c5582611b1e565b9050919050565b6000610c8a7fa33d91318f77fb95d2fe4386c2678c14692f4adf788a72bcf2e6161f1537a0df60001b6116f9565b610cb67f261f9308b795e5a1107f3e9f410b1729e5552cbec6ef68eb8baeb4101526ac8160001b6116f9565b610ce27fc3b939dd6c5215c8cbeda83887c1c350b1860f6de8924882ae7d062b377db98860001b6116f9565b610cf5610ced61195f565b600201611b4b565b905090565b6000610d287fae1f162029218081da04bc8ad4cc45c451cdd486a41807dfddaa697cdb51db7760001b6116f9565b610d547fec18d1e30aaf675a2d5fed1149a973e710441a8383555ea0ffb7ee515f1cd24660001b6116f9565b610d807f5fad527e5d3d69e8dc7332a6976fecc95c52e88dffc8d20b259e135cb58c4bf660001b6116f9565b610dd0610d8b61195f565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611b4b565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e175750610e16853361145e565b5b610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90613c55565b60405180910390fd5b610e64338686868686611b59565b5050505050565b6000610e997f340aa1274e9ed6d73309ff2182f3df83aa741ede424aa35a2849a2c2144894d360001b6116f9565b610ec57f21d1933df3a4a8fa207ebb584b97eb52ab398c4a1cfec85eb03e5f5f6d1ccf5e60001b6116f9565b610ef17fa7c174764dca473b275d9b1190c3b7f15c9dd7d692ab10c1b9267a4fc13a517b60001b6116f9565b610ef961195f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613ce7565b60405180910390fd5b6000610f72611b7d565b60000190506000845167ffffffffffffffff811115610f9457610f93613051565b5b604051908082528060200260200182016040528015610fc25781602001602082028036833780820191505090505b50905060005b855181101561110a57600073ffffffffffffffffffffffffffffffffffffffff16868281518110610ffc57610ffb613d07565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613da8565b60405180910390fd5b8260008683815181106110705761106f613d07565b5b60200260200101518152602001908152602001600020600087838151811061109b5761109a613d07565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106110f1576110f0613d07565b5b6020026020010181815250508080600101915050610fc8565b50809250505092915050565b60006111447fc51b1a04fdf35d4961d655a2e9df2e144166121cdbbd5fcebcda1d4fb6b4afd760001b611baa565b6111707f160a64ca27fca7833fe2c155dbc48620377746ad27e180a793134a8b523ea11160001b611baa565b61119c7ff7ead2e2d6d8c6b4cb4e64bda1cd535361e99fb0ae87d56950d3fc237d1c83e760001b611baa565b6111a46117da565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b606061120882611bad565b9050919050565b606061121a82611caf565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690613e3a565b60405180910390fd5b80611298611b7d565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611389919061301b565b60405180910390a35050565b60006113c37f0619baf6ca8789a3e86f4aff6d89e719238ed3e720a6993e0accc89ca92b9d4860001b6116f9565b6113ef7fdf5461867b8a8bd8fb4f7803cb9c246a7892adc5b2b475b1f75dba51b2182f7a60001b6116f9565b61141b7faca8ec6ded37615fcf2cd5aa4063085146ed390b11503d1b7d2ea113fb25dd7660001b6116f9565b61142361195f565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061145782611daf565b9050919050565b6000611468611b7d565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061153b575061153a853361145e565b5b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190613c55565b60405180910390fd5b611588338686868686611dd5565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613ecc565b60405180910390fd5b611607611b7d565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b50565b600061172a7f37178690aaa1dfd0c6c3d44a41adbe336ddf4e47b2b013705f748d17f953a4f960001b611df9565b6117567fb61c1cab06bcac74cb6fcec39279be9822daecce53b0d226a7f55aaa4694a84160001b611df9565b6117827f390cbf5b98e53b9eb14b6ef693414cb3bd075af27cf444b8236e59e0e311394260001b611df9565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90506117d37f2e97ffd5dadbc67c0d3ba2581f455f642621064ef90f5a7cfc10aed47737e18660001b611df9565b8091505090565b60006118087fc12b04ea53e4473ef466818b7c8c94c90f6bd77205d7c9b82f6a5d4de196a6a960001b611dfc565b6118347f89a1f54751c7a873ff3e8896571a78db56811d12ddf8d5d28efd5aa5386e903760001b611dfc565b6118607fdedee73f76c7a07a4b418b59e38145ca6423d0815832d433528f8a1d7b01551a60001b611dfc565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390506118b17f47b0161d8c57ec0e65647be2a620071b1a78d3a9606f10c9cd43c92ffe7741da60001b611dfc565b8091505090565b6118e47f431bc7f452809a3732c5c1a0b6c51dcd24cd363bf1f82908d52d72546076378460001b611a3d565b6119107f52240686f143432fc52d707de7b9ed833ae7ca5093172522026947ac54409f8760001b611a3d565b61193c7f7327e968d0500ce8cdfbfe0fdf076e04cd8669b4e88c690338cd4426d8446aba60001b611a3d565b80611945611a40565b600101908051906020019061195b929190612dc6565b5050565b600061198d7f621434c9fd2e8bba0ec1e8665c6852f4a9919372e89bb045ed4a46aee0a51fe460001b611dff565b6119b97f563cb72bde513957c46c4fa0753bb9816050c133ed604584517c0f39a73e4eed60001b611dff565b6119e57f7f53722e1ed3903aa24ee1e622ad9a65b4217ee614f3685b860a52a8be9fc95760001b611dff565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e9050611a367f3e1bdcbbbb16eabd821040291754918d2051e700c9a0133e121019f9de911ecd60001b611dff565b8091505090565b50565b6000611a6e7fa9f6d638cb34cb261597ae232ca47e1e05373b83d270d71d783851218479d26560001b611e02565b611a9a7fb459fc962a4b7a702eeba11b454e002d1e5fe7f2f71ac0249e476d78be45e16e60001b611e02565b611ac67f373e0f10c4bbfcba941e9d7478208b12b2e79e04105738322bffaa27a05a837260001b611e02565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050611b177f3b7a75e893a3d4e113ca24a01863558add93663b17f32ee1a0d99b5a4d4f7c1060001b611e02565b8091505090565b6000611b44611b2b611e05565b6001016000848152602001908152602001600020611e32565b9050919050565b600081600001549050919050565b611b67868686868686611e47565b611b7586868686868661214c565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b50565b60606000611bb9611e05565b600101600084815260200190815260200160002090506000611bda82611e32565b67ffffffffffffffff811115611bf357611bf2613051565b5b604051908082528060200260200182016040528015611c215781602001602082028036833780820191505090505b50905060005b611c3083611e32565b811015611ca457611c4a818461232390919063ffffffff16565b828281518110611c5d57611c5c613d07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050611c27565b508092505050919050565b60606000611cbb611e05565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611d088261233d565b67ffffffffffffffff811115611d2157611d20613051565b5b604051908082528060200260200182016040528015611d4f5781602001602082028036833780820191505090505b50905060005b611d5e8361233d565b811015611da457611d78818461235290919063ffffffff16565b828281518110611d8b57611d8a613d07565b5b6020026020010181815250508080600101915050611d55565b508092505050919050565b6000611db9611e05565b6000016000838152602001908152602001600020549050919050565b611de386868686868661236c565b611df18686868686866125e3565b505050505050565b50565b50565b50565b50565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000611e40826000016127ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead90613f5e565b60405180910390fd5b8151835114611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613ff0565b60405180910390fd5b611f088686868686866127cb565b6000611f12611b7d565b600001905060005b84518110156120c4576000858281518110611f3857611f37613d07565b5b602002602001015190506000858381518110611f5757611f56613d07565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef90614082565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380600101945050508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b691906140d1565b925050819055505050611f1a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161213b929190614127565b60405180910390a450505050505050565b61216b8473ffffffffffffffffffffffffffffffffffffffff166127e1565b1561231b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121b19594939291906141b3565b6020604051808303816000875af19250505080156121ed57506040513d601f19601f820116820180604052508101906121ea9190614230565b60015b612292576121f961426a565b806308c379a003612255575061220d61428c565b806122185750612257565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c91906132c8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899061438e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614420565b60405180910390fd5b505b505050505050565b600061233283600001836127f4565b60001c905092915050565b600061234b826000016127ba565b9050919050565b600061236183600001836127f4565b60001c905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d290613f5e565b60405180910390fd5b6123f98686866123ea87612868565b6123f387612868565b866127cb565b6000612403611b7d565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561249f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249690614082565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255591906140d1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516125d2929190614440565b60405180910390a450505050505050565b6126028473ffffffffffffffffffffffffffffffffffffffff166127e1565b156127b2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612648959493929190614469565b6020604051808303816000875af192505050801561268457506040513d601f19601f820116820180604052508101906126819190614230565b60015b6127295761269061426a565b806308c379a0036126ec57506126a461428c565b806126af57506126ee565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e391906132c8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127209061438e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a790614420565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b6127d98686868686866128e2565b505050505050565b600080823b905060008111915050919050565b60008183600001805490501161283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283690614535565b60405180910390fd5b82600001828154811061285557612854613d07565b5b9060005260206000200154905092915050565b60606000600167ffffffffffffffff81111561288757612886613051565b5b6040519080825280602002602001820160405280156128b55781602001602082028036833780820191505090505b50905082816000815181106128cd576128cc613d07565b5b60200260200101818152505080915050919050565b6128f08686868686866128f8565b505050505050565b612906868686868686612ba9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612ba1576000612943611e05565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015612b9b5760008782815181106129f8576129f7613d07565b5b602002602001015190506000811115612b8d576000898381518110612a2057612a1f613d07565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603612a8f57818760000160008381526020019081526020016000206000828254612a8391906140d1565b92505081905550612ada565b81612a9a8d8361158f565b03612ad957612ac38c876000848152602001908152602001600020612bb190919063ffffffff16565b50612ad78186612be190919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1603612b3f57818760000160008381526020019081526020016000206000828254612b339190614555565b92505081905550612b8b565b6000612b4b8c8361158f565b03612b8a57612b748b876000848152602001908152602001600020612bfb90919063ffffffff16565b50612b888185612c2b90919063ffffffff16565b505b5b505b8180600101925050506129da565b50505050505b505050505050565b505050505050565b6000612bd9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612c45565b905092915050565b6000612bf3836000018360001b612c45565b905092915050565b6000612c23836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612d33565b905092915050565b6000612c3d836000018360001b612d33565b905092915050565b60008083600101600084815260200190815260200160002054905060008114612d2757600084600001600186600001805490500381548110612c8a57612c89613d07565b5b9060005260206000200154905080856000016001840381548110612cb157612cb0613d07565b5b906000526020600020018190555081856001016000838152602001908152602001600020819055505083600001805480612cee57612ced614589565b5b60019003818190600052602060002001600090559055836001016000848152602001908152602001600020600090556001915050612d2d565b60009150505b92915050565b6000612d3f8383612da3565b612d98578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612d9d565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054612dd290613a52565b90600052602060002090601f016020900481019282612df45760008555612e3b565b82601f10612e0d57805160ff1916838001178555612e3b565b82800160010185558215612e3b579182015b82811115612e3a578251825591602001919060010190612e1f565b5b509050612e489190612e4c565b5090565b5b80821115612e65576000816000905550600101612e4d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ea882612e7d565b9050919050565b612eb881612e9d565b8114612ec357600080fd5b50565b600081359050612ed581612eaf565b92915050565b6000819050919050565b612eee81612edb565b8114612ef957600080fd5b50565b600081359050612f0b81612ee5565b92915050565b60008060408385031215612f2857612f27612e73565b5b6000612f3685828601612ec6565b9250506020612f4785828601612efc565b9150509250929050565b612f5a81612edb565b82525050565b6000602082019050612f756000830184612f51565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fb081612f7b565b8114612fbb57600080fd5b50565b600081359050612fcd81612fa7565b92915050565b600060208284031215612fe957612fe8612e73565b5b6000612ff784828501612fbe565b91505092915050565b60008115159050919050565b61301581613000565b82525050565b6000602082019050613030600083018461300c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308982613040565b810181811067ffffffffffffffff821117156130a8576130a7613051565b5b80604052505050565b60006130bb612e69565b90506130c78282613080565b919050565b600067ffffffffffffffff8211156130e7576130e6613051565b5b6130f082613040565b9050602081019050919050565b82818337600083830152505050565b600061311f61311a846130cc565b6130b1565b90508281526020810184848401111561313b5761313a61303b565b5b6131468482856130fd565b509392505050565b600082601f83011261316357613162613036565b5b813561317384826020860161310c565b91505092915050565b600080600080600060a0868803121561319857613197612e73565b5b600086013567ffffffffffffffff8111156131b6576131b5612e78565b5b6131c28882890161314e565b95505060206131d388828901612ec6565b94505060406131e488828901612ec6565b93505060606131f588828901612ec6565b925050608061320688828901612ec6565b9150509295509295909350565b60006020828403121561322957613228612e73565b5b600061323784828501612efc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561327a57808201518184015260208101905061325f565b83811115613289576000848401525b50505050565b600061329a82613240565b6132a4818561324b565b93506132b481856020860161325c565b6132bd81613040565b840191505092915050565b600060208201905081810360008301526132e2818461328f565b905092915050565b600060208284031215613300576132ff612e73565b5b600061330e84828501612ec6565b91505092915050565b600067ffffffffffffffff82111561333257613331613051565b5b602082029050602081019050919050565b600080fd5b600061335b61335684613317565b6130b1565b9050808382526020820190506020840283018581111561337e5761337d613343565b5b835b818110156133a757806133938882612efc565b845260208401935050602081019050613380565b5050509392505050565b600082601f8301126133c6576133c5613036565b5b81356133d6848260208601613348565b91505092915050565b600067ffffffffffffffff8211156133fa576133f9613051565b5b61340382613040565b9050602081019050919050565b600061342361341e846133df565b6130b1565b90508281526020810184848401111561343f5761343e61303b565b5b61344a8482856130fd565b509392505050565b600082601f83011261346757613466613036565b5b8135613477848260208601613410565b91505092915050565b600080600080600060a0868803121561349c5761349b612e73565b5b60006134aa88828901612ec6565b95505060206134bb88828901612ec6565b945050604086013567ffffffffffffffff8111156134dc576134db612e78565b5b6134e8888289016133b1565b935050606086013567ffffffffffffffff81111561350957613508612e78565b5b613515888289016133b1565b925050608086013567ffffffffffffffff81111561353657613535612e78565b5b61354288828901613452565b9150509295509295909350565b61355881612e9d565b82525050565b6000602082019050613573600083018461354f565b92915050565b600067ffffffffffffffff82111561359457613593613051565b5b602082029050602081019050919050565b60006135b86135b384613579565b6130b1565b905080838252602082019050602084028301858111156135db576135da613343565b5b835b8181101561360457806135f08882612ec6565b8452602084019350506020810190506135dd565b5050509392505050565b600082601f83011261362357613622613036565b5b81356136338482602086016135a5565b91505092915050565b6000806040838503121561365357613652612e73565b5b600083013567ffffffffffffffff81111561367157613670612e78565b5b61367d8582860161360e565b925050602083013567ffffffffffffffff81111561369e5761369d612e78565b5b6136aa858286016133b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136e981612edb565b82525050565b60006136fb83836136e0565b60208301905092915050565b6000602082019050919050565b600061371f826136b4565b61372981856136bf565b9350613734836136d0565b8060005b8381101561376557815161374c88826136ef565b975061375783613707565b925050600181019050613738565b5085935050505092915050565b6000602082019050818103600083015261378c8184613714565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137c981612e9d565b82525050565b60006137db83836137c0565b60208301905092915050565b6000602082019050919050565b60006137ff82613794565b613809818561379f565b9350613814836137b0565b8060005b8381101561384557815161382c88826137cf565b9750613837836137e7565b925050600181019050613818565b5085935050505092915050565b6000602082019050818103600083015261386c81846137f4565b905092915050565b61387d81613000565b811461388857600080fd5b50565b60008135905061389a81613874565b92915050565b600080604083850312156138b7576138b6612e73565b5b60006138c585828601612ec6565b92505060206138d68582860161388b565b9150509250929050565b600080604083850312156138f7576138f6612e73565b5b600061390585828601612ec6565b925050602061391685828601612ec6565b9150509250929050565b600080600080600060a0868803121561393c5761393b612e73565b5b600061394a88828901612ec6565b955050602061395b88828901612ec6565b945050604061396c88828901612efc565b935050606061397d88828901612efc565b925050608086013567ffffffffffffffff81111561399e5761399d612e78565b5b6139aa88828901613452565b9150509295509295909350565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b60006139ed60028361324b565b91506139f8826139b7565b602082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6a57607f821691505b602082108103613a7d57613a7c613a23565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000613ab9601d8361324b565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613b1c81613a52565b613b268186613aef565b94506001821660008114613b415760018114613b5257613b85565b60ff19831686528186019350613b85565b613b5b85613afa565b60005b83811015613b7d57815481890152600182019150602081019050613b5e565b838801955050505b50505092915050565b6000613b9982613240565b613ba38185613aef565b9350613bb381856020860161325c565b80840191505092915050565b6000613bcb8285613b0f565b9150613bd78284613b8e565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613c3f60298361324b565b9150613c4a82613be3565b604082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613cd160298361324b565b9150613cdc82613c75565b604082019050919050565b60006020820190508181036000830152613d0081613cc4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000613d9260318361324b565b9150613d9d82613d36565b604082019050919050565b60006020820190508181036000830152613dc181613d85565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613e2460298361324b565b9150613e2f82613dc8565b604082019050919050565b60006020820190508181036000830152613e5381613e17565b9050919050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613eb6602b8361324b565b9150613ec182613e5a565b604082019050919050565b60006020820190508181036000830152613ee581613ea9565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f4860258361324b565b9150613f5382613eec565b604082019050919050565b60006020820190508181036000830152613f7781613f3b565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613fda60288361324b565b9150613fe582613f7e565b604082019050919050565b6000602082019050818103600083015261400981613fcd565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b600061406c602b8361324b565b915061407782614010565b604082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140dc82612edb565b91506140e783612edb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411c5761411b6140a2565b5b828201905092915050565b600060408201905081810360008301526141418185613714565b905081810360208301526141558184613714565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006141858261415e565b61418f8185614169565b935061419f81856020860161325c565b6141a881613040565b840191505092915050565b600060a0820190506141c8600083018861354f565b6141d5602083018761354f565b81810360408301526141e78186613714565b905081810360608301526141fb8185613714565b9050818103608083015261420f818461417a565b90509695505050505050565b60008151905061422a81612fa7565b92915050565b60006020828403121561424657614245612e73565b5b60006142548482850161421b565b91505092915050565b60008160e01c9050919050565b600060033d11156142895760046000803e61428660005161425d565b90505b90565b600060443d106143195761429e612e69565b60043d036004823e80513d602482011167ffffffffffffffff821117156142c6575050614319565b808201805167ffffffffffffffff8111156142e45750505050614319565b80602083010160043d038501811115614301575050505050614319565b61431082602001850186613080565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061437860348361324b565b91506143838261431c565b604082019050919050565b600060208201905081810360008301526143a78161436b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061440a60288361324b565b9150614415826143ae565b604082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b60006040820190506144556000830185612f51565b6144626020830184612f51565b9392505050565b600060a08201905061447e600083018861354f565b61448b602083018761354f565b6144986040830186612f51565b6144a56060830185612f51565b81810360808301526144b7818461417a565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b600061451f60228361324b565b915061452a826144c3565b604082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b600061456082612edb565b915061456b83612edb565b92508282101561457e5761457d6140a2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220582b769d611225cf5a4b0c8c0b746a69ec0815c80b16fd16bc51f88da46b3d1664736f6c634300080d0033"; type CyberTokenBaseConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/DropRandomCaller__factory.ts b/packages/contracts/typechain-types/factories/DropRandomCaller__factory.ts new file mode 100644 index 0000000..8e1775f --- /dev/null +++ b/packages/contracts/typechain-types/factories/DropRandomCaller__factory.ts @@ -0,0 +1,87 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + DropRandomCaller, + DropRandomCallerInterface, +} from "../DropRandomCaller"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract CyberDropBase", + name: "_cyberDropBase", + type: "address", + }, + { + internalType: "uint256[]", + name: "_tokenIds", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "testMintRandom", + outputs: [], + stateMutability: "payable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b506105d6806100206000396000f3fe60806040526004361061001e5760003560e01c8063e7af8abc14610023575b600080fd5b61003d60048036038101906100389190610378565b61003f565b005b61006b7f7589fc032c80584154c245bbdb78264edebc839ac31d0d8109b9113d4da3e3f460001b61014b565b6100977f4f16718768ef31b11c1836f1f3dab18b3fa58d33b9d7bed34873d6dfef98c87f60001b61014b565b6100c37f6ebadf2a148eb1cb57651afee3b5ba8bba81439aa95974b6cd913326573c74a660001b61014b565b8373ffffffffffffffffffffffffffffffffffffffff16637cafe690348585856040518563ffffffff1660e01b815260040161010193929190610502565b60206040518083038185885af115801561011f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101449190610573565b5050505050565b50565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061018d82610162565b9050919050565b600061019f82610182565b9050919050565b6101af81610194565b81146101ba57600080fd5b50565b6000813590506101cc816101a6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126101f7576101f66101d2565b5b8235905067ffffffffffffffff811115610214576102136101d7565b5b6020830191508360208202830111156102305761022f6101dc565b5b9250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102858261023c565b810181811067ffffffffffffffff821117156102a4576102a361024d565b5b80604052505050565b60006102b761014e565b90506102c3828261027c565b919050565b600067ffffffffffffffff8211156102e3576102e261024d565b5b6102ec8261023c565b9050602081019050919050565b82818337600083830152505050565b600061031b610316846102c8565b6102ad565b90508281526020810184848401111561033757610336610237565b5b6103428482856102f9565b509392505050565b600082601f83011261035f5761035e6101d2565b5b813561036f848260208601610308565b91505092915050565b6000806000806060858703121561039257610391610158565b5b60006103a0878288016101bd565b945050602085013567ffffffffffffffff8111156103c1576103c061015d565b5b6103cd878288016101e1565b9350935050604085013567ffffffffffffffff8111156103f0576103ef61015d565b5b6103fc8782880161034a565b91505092959194509250565b600082825260208201905092915050565b600080fd5b600061042a8385610408565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561045d5761045c610419565b5b60208302925061046e8385846102f9565b82840190509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104b4578082015181840152602081019050610499565b838111156104c3576000848401525b50505050565b60006104d48261047a565b6104de8185610485565b93506104ee818560208601610496565b6104f78161023c565b840191505092915050565b6000604082019050818103600083015261051d81858761041e565b9050818103602083015261053181846104c9565b9050949350505050565b60008115159050919050565b6105508161053b565b811461055b57600080fd5b50565b60008151905061056d81610547565b92915050565b60006020828403121561058957610588610158565b5b60006105978482850161055e565b9150509291505056fea2646970667358221220f0f3d979b045425da5cd28407b3eac0a92919ec2871b9650b09ef73b88ff868564736f6c634300080d0033"; + +type DropRandomCallerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: DropRandomCallerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class DropRandomCaller__factory extends ContractFactory { + constructor(...args: DropRandomCallerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + this.contractName = "DropRandomCaller"; + } + + deploy( + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + getDeployTransaction( + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + attach(address: string): DropRandomCaller { + return super.attach(address) as DropRandomCaller; + } + connect(signer: Signer): DropRandomCaller__factory { + return super.connect(signer) as DropRandomCaller__factory; + } + static readonly contractName: "DropRandomCaller"; + public readonly contractName: "DropRandomCaller"; + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): DropRandomCallerInterface { + return new utils.Interface(_abi) as DropRandomCallerInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): DropRandomCaller { + return new Contract(address, _abi, signerOrProvider) as DropRandomCaller; + } +} diff --git a/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts b/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts index bdae6fd..3f45e75 100644 --- a/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts +++ b/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts @@ -22,7 +22,7 @@ const _abi = [ ]; const _bytecode = - "0x60a6610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b605e7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e81565b60405190815260200160405180910390f3fea26469706673582212207441ad000570535c2523f888488eb01066a54e63a9ba65871262fa4625a062d364736f6c634300080d0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e81565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea26469706673582212207677044e7e95f6533934d36331fb0b03765363ffacfb777ab4c079eeb82b756064736f6c634300080d0033"; type LibAppStorageConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/LibDiamond__factory.ts b/packages/contracts/typechain-types/factories/LibDiamond__factory.ts index ab6c114..ff7266a 100644 --- a/packages/contracts/typechain-types/factories/LibDiamond__factory.ts +++ b/packages/contracts/typechain-types/factories/LibDiamond__factory.ts @@ -22,7 +22,7 @@ const _abi = [ ]; const _bytecode = - "0x60a6610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b2bebf55146038575b600080fd5b605e7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c81565b60405190815260200160405180910390f3fea2646970667358221220d68994c796b716a682ab327816da4671f3ee236731c7013972d14abf4a4b672964736f6c634300080d0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b2bebf55146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c81565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea2646970667358221220a640f2048bde7e51c5101cafdff9c521a5803af9c9c9f5b549a9d64b39d4671764736f6c634300080d0033"; type LibDiamondConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts b/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts index b3bdddb..2108d64 100644 --- a/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts +++ b/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts @@ -25,7 +25,7 @@ const _abi = [ ]; const _bytecode = - "0x60a6610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b605e7f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65981565b60405190815260200160405180910390f3fea2646970667358221220cddc9e620a3a29b173e811d8045698f1c6e0aac3c902c19a0586a87586b51b1f64736f6c634300080d0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65981565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea264697066735822122003e1f45a37638f6d111edabd362f08dc008b38f8f5d88c98788a24b9e56b4aa764736f6c634300080d0033"; type LibDropStorageConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/index.ts b/packages/contracts/typechain-types/index.ts index d4fc2c8..dab4c20 100644 --- a/packages/contracts/typechain-types/index.ts +++ b/packages/contracts/typechain-types/index.ts @@ -26,6 +26,7 @@ export type { LibDiamond } from "./LibDiamond"; export type { ERC1155URI } from "./ERC1155URI"; export type { LibAppStorage } from "./LibAppStorage"; export type { LibDropStorage } from "./LibDropStorage"; +export type { DropRandomCaller } from "./DropRandomCaller"; export { ERC165__factory } from "./factories/ERC165__factory"; export { IERC165__factory } from "./factories/IERC165__factory"; @@ -52,3 +53,4 @@ export { LibDiamond__factory } from "./factories/LibDiamond__factory"; export { ERC1155URI__factory } from "./factories/ERC1155URI__factory"; export { LibAppStorage__factory } from "./factories/LibAppStorage__factory"; export { LibDropStorage__factory } from "./factories/LibDropStorage__factory"; +export { DropRandomCaller__factory } from "./factories/DropRandomCaller__factory";