Commit e2efe191 authored by Veronica Coutts's avatar Veronica Coutts

Added v1 project

parent 463c2c70
File added
MIT License
Copyright (c) 2020 Veronica
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
liquorice-gen-v1
# Liquorice Gen
A bonding curve factory for simple and easy dynamic bonding curve creation.
## Getting started
Below are the instructions to get the code up and running
### Installation
Run `yarn` or `npm install`
### Build & test
To build the smart contracts run `yarn build`.
To test, first run `yarn start` (which will start a ganache instance) and then in a separate terminal run `yarn test` to run the smart contract tests.
### Front end
To view the front end simply double click the `index.html` to open it in a browser of your choice.
# What is Liquorice Gen?
Liquorice Gen allows you to gather liquidity to launch a token onto the main net without having to go through traditional fundraising routes.
Through the use of a bonding curve as an automated market maker, you can deterministically raise collateral to launch a token onto uniswap at a predetermined price.
## The nitty gritty
When creating a market through the [bonding curve factory](./contracts/BondingCurveFactory.sol) you will need to enter the following criteria:
1. **The curve parameters**
These parameters will be used inside the [bonding curve](./contracts/Curve.sol) to determine the price of your token.
2. **Name**
A name for your [token](./contracts/Token.sol). This is for compliance with the [ERC20](./node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol) standard.
3. **Symbol**
A symbol for your [token](./contracts/Token.sol). This is for compliance with the [ERC20](./node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol) standard.
4. **An address for the underlying collateral**
When buying a token, the user will have to pay for it in something. This is that something. This underlying collateral must comply with the [ERC20](./node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol) standard, and we would recommend using a stable coin as to ensure the value of your token does not get affected by the volatility of your collateral.
5. **Token threshold**
The amount of tokens you would like to be created before the token transitions to a uniswap market. Remember that no more tokens will be able to be created after the token transitions to uniswap. From this number and your curve parameters the amount of collateral that your token will seed the uniswap pool with can be predetermined, along with the start price of your token in the uniswap market (this start price will be the end price determined by the bonding curve at this supply).
6. **Minimum threshold**
Like the threshold above, except that this minimum threshold will only be checked against after your timeout expires. This is here so that if your threshold is not reached within the time frame, your token can still move across to uniswap. Remember that this cannot be changed once it is set, so think carefully about it.
7. **Threshold timeout**
Entered in months (and then conveniently converted) this time line determines when your token will switch from trying to reach the threshold to reaching the minimum threshold.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
pragma solidity 0.6.6;
import "./Token.sol";
import "./Curve.sol";
import "./MarketTransition.sol";
import "./IUniswapV2Router01.sol";
import "./BokkyPooBahsDateTimeLibrary.sol";
/**
* @author Veronica Coutts @vonnie610 (twitter) @VeronicaLC (GitLab)
* @title Bonding Curve Factory
* @notice This curve contract enables an IBCO (Initial Bonding Curve Offering)
* as a mechanism to launch a token into the open market without having
* to raise the funds in a traditional manner.
* This product is a beta. Use at your own risk.
*/
contract BondingCurveFactory {
using BokkyPooBahsDateTimeLibrary for uint256;
IUniswapV2Router01 public uniswapRouter;
Curve public activeCurve;
MarketTransition public activeMarketTransition;
address public owner;
mapping(address => address[]) public deployedMarkets;
event factorySetUp(address curve, address market);
event marketCreated(address owner, address token, string name);
modifier onlyOnwer() {
require(msg.sender == owner, "Only owner can access");
_;
}
/**
* @param _uniswapRouter: The address of the uniswap contract on the
* network this contract is deployed on.
*/
constructor(address _uniswapRouter) public {
uniswapRouter = IUniswapV2Router01(_uniswapRouter);
owner = msg.sender;
activeCurve = new Curve();
activeMarketTransition = new MarketTransition(address(uniswapRouter));
emit factorySetUp(
address(activeCurve),
address(activeMarketTransition)
);
}
/**
* @return address: The address of the curve being used in this factory
* and all deployed tokens from this factory.
* @return address: The address of the market transition contract being
* used by this factory and all tokens deployed from this factory.
*/
function getFactorySetUp() public view returns(address, address) {
return (
address(activeCurve),
address(activeMarketTransition)
);
}
/**
* @param _curveParameters: The curve "settings" that will be used in the
* curve instance in order to determine the prices of the token.
* For more information please see the curve contract docs.
* @param _name: The name of the token.
* @param _symbol: The symbol for the token.
* @param _underlyingCollateral: The addresss of the underlying collateral
* for the tokens. I.e the currency for the price of the token.
* Recomended to use a stable coin such as DAI to ensure a stable
* price for your token.
* @param _tokenThreshold: The transition threshold for the token in
* tokens. As the value of the tokens is determanistic (with the
* bonding curve enforcing a price) the threshold for when the
* token can move to the free market can be expressed in tokens.
* @param _minimumTokenThreshold: This minimum token threshold is a safty
* catch for it the threshold is not met before expiry, this min
* threshold can still force the market into uniswap. If you only
* want to move acress at your threshold, simply set this vaule
* to be the same as the threshold.
* @param _thresholdTimeout: Once this timeout is reached the curve will
* check against the min threshold for transition. When this
* timeout is reached, the curve will operate as normal.
* @return address: The address of the new token.
*/
function createMarket(
uint256[3] memory _curveParameters,
string memory _name,
string memory _symbol,
address _underlyingCollateral,
uint256 _tokenThreshold,
uint256 _minimumTokenThreshold,
uint256 _thresholdTimeout
)
public
returns(address)
{
// TODO add checks for curve variables
/**
a & b & C cant all be 0
if a == 0 then b != 0 and visa versa
a cant be bigger than ... ?
*/
Token newToken = new Token(
address(activeCurve),
address(activeMarketTransition),
_curveParameters,
_name,
_symbol,
_underlyingCollateral,
_tokenThreshold,
_minimumTokenThreshold,
now.addMonths(_thresholdTimeout)
);
deployedMarkets[msg.sender].push(address(newToken));
emit marketCreated(msg.sender, address(newToken), _name);
return address(newToken);
}
/**
* @param _user: The address of the user
* @return address[]: The addresses of any markets the user has deployed
* through this factory.
*/
function getDeployedMarkets(
address _user
)
public
view
returns(address[] memory)
{
return deployedMarkets[msg.sender];
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
pragma solidity 0.6.6;
interface I_MarketTransition {
function transition() external;
function getTokensToMint() external returns(uint256);
function getRouterAddress() external view returns(address);
function getTransitionInfo(address _token) external view returns(uint, uint, uint);
function getMonthsFutureTimestamp(uint256 _months) external view returns(uint256);
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1012.50702 82.529"><defs><style>.cls-1,.cls-4,.cls-5{fill:#fff;}.cls-2{fill:none;stroke:#fff;stroke-miterlimit:10;}.cls-3,.cls-4,.cls-5{isolation:isolate;}.cls-4{font-size:17px;}.cls-4,.cls-5{font-family:HelveticaNeue, Helvetica Neue;}.cls-5{font-size:26px;}</style></defs><g id="page1"><rect id="Rectangle_27" data-name="Rectangle 27" class="cls-1" x="5.25767" y="44.76893" width="20.391" height="2.399"/><path id="Path_2" data-name="Path 2" class="cls-1" d="M12.92167,66.69893c-.708.042-.875.083-.875.458,0,.416.208.416.958.416h1.916c3.54,0,5.123,2.915,5.123,6.914,0,5.456-2.832,6.914-4.873,6.914-2,0-5.414-.958-6.622-3.707a2.04,2.04,0,0,0,2.541-2.041,1.969,1.969,0,0,0-1.89526-2.04007q-.07335-.0027-.14674.00007a1.983,1.983,0,0,0-2.082,2.166c0,3.707,3.707,6.747,8.33,6.747a8.339,8.339,0,0,0,8.621-8c0-3.832-3.082-6.831-7.08-7.539a7.849,7.849,0,0,0,5.956-7.33c0-3.29-3.415-5.706-7.455-5.706-4.166.004-7.248,2.544-7.248,5.584a1.848,1.848,0,0,0,1.916,2,1.835,1.835,0,0,0,1.874-1.79516q.00085-.0394,0-.07884a1.83,1.83,0,0,0-1.73975-1.916q-.08807-.00424-.17624,0a1.3,1.3,0,0,0-.458.042c1.583-2.833,5.495-2.833,5.706-2.833,1.374,0,4.082.625,4.082,4.706a9.4,9.4,0,0,1-1.333,4.915,4.2,4.2,0,0,1-3.79,2Z"/><path id="Path_3" data-name="Path 3" class="cls-1" d="M63.89168,81.30093a.893.893,0,0,0-.24-.54c-2.759-2.939-6.839-7.8-9.358-17.576a72.508,72.508,0,0,1-1.92-17.216c0-15.777,3.779-26.814,10.978-34.613.54-.54.54-.66.54-.78,0-.6-.48-.6-.72-.6-.9,0-4.139,3.6-4.919,4.5-6.119,7.258-10.018,18.055-10.018,31.434,0,8.518,1.5,20.576,9.358,30.713.6.72,4.5,5.279,5.579,5.279C63.41168,81.90093,63.89168,81.90093,63.89168,81.30093Z"/><path id="Path_4" data-name="Path 4" class="cls-1" d="M95.04468,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939A1.89,1.89,0,0,0,71.475,54.72228q-.09325-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.566-.54179l-.034.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,95.04468,36.49093Z"/><path id="Path_5" data-name="Path 5" class="cls-1" d="M111.98367,43.26593c0-.958,0-1-.833-1-1,1.125-3.082,2.666-7.372,2.666v1.208a12.01116,12.01116,0,0,0,5.331-1.083v21.7c0,1.5-.125,2-3.79,2h-1.291v1.208c1.125-.083,5.165-.083,6.539-.083s5.373,0,6.5.083v-1.209h-1.294c-3.665,0-3.79-.5-3.79-2Z"/><path id="Path_6" data-name="Path 6" class="cls-1" d="M129.48967,24.24393c-.708.042-.875.083-.875.458,0,.416.208.416.958.416h1.916c3.54,0,5.123,2.915,5.123,6.914,0,5.456-2.832,6.914-4.873,6.914-2,0-5.414-.958-6.622-3.707a2.04,2.04,0,0,0,2.541-2.041,1.969,1.969,0,0,0-1.89526-2.04007q-.07335-.0027-.14674.00007a1.983,1.983,0,0,0-2.082,2.166c0,3.707,3.707,6.747,8.33,6.747a8.339,8.339,0,0,0,8.621-8c0-3.832-3.082-6.831-7.08-7.539a7.849,7.849,0,0,0,5.956-7.33c0-3.29-3.415-5.706-7.455-5.706-4.166.004-7.248,2.544-7.248,5.584a1.89777,1.89777,0,0,0,3.79.20485q.00084-.03942,0-.07885a1.83,1.83,0,0,0-1.73976-1.916q-.08807-.00424-.17624,0a1.3,1.3,0,0,0-.458.042c1.583-2.833,5.495-2.833,5.706-2.833,1.374,0,4.082.625,4.082,4.706a9.4,9.4,0,0,1-1.333,4.915,4.2,4.2,0,0,1-3.79,2Z"/><path id="Path_7" data-name="Path 7" class="cls-1" d="M196.52567,47.17293c1.02,0,2.1,0,2.1-1.2s-1.08-1.2-2.1-1.2h-32.454c-1.02,0-2.1,0-2.1,1.2s1.08,1.2,2.1,1.2Z"/><path id="Path_8" data-name="Path 8" class="cls-1" d="M245.41467,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939,1.89,1.89,0,0,0-1.85367-1.92565q-.09326-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.56595-.54179l-.03405.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,245.41467,36.49093Z"/><path id="Path_9" data-name="Path 9" class="cls-1" d="M269.01767,56.63593c0-3.457-.208-6.831-1.708-10a7.42611,7.42611,0,0,0-13.661.295c-1.166,2.624-1.582,5.207-1.582,9.705,0,4.04.292,7.08,1.791,10.038a7.406,7.406,0,0,0,6.664,4.164c3.624,0,5.706-2.166,6.914-4.581C268.93467,63.13293,269.01767,59.04693,269.01767,56.63593Zm-8.5,13.37c-1.333,0-4.04-.75-4.831-5.29a51.3281,51.3281,0,0,1-.458-8.58,36.46525,36.46525,0,0,1,.673-8.955,4.984,4.984,0,0,1,4.62-4.081c1.583,0,4,.958,4.79,4.54a42.47441,42.47441,0,0,1,.541,8.5,51.31341,51.31341,0,0,1-.458,8.5c-.793,4.574-3.416,5.365-4.873,5.365Z"/><path id="Path_10" data-name="Path 10" class="cls-1" d="M279.85966,24.24393c-.708.042-.875.083-.875.458,0,.416.208.416.958.416h1.916c3.54,0,5.123,2.915,5.123,6.914,0,5.456-2.832,6.914-4.873,6.914-2,0-5.414-.958-6.622-3.707a2.04,2.04,0,0,0,2.541-2.041,1.969,1.969,0,0,0-1.89526-2.04007q-.07335-.0027-.14674.00007a1.983,1.983,0,0,0-2.082,2.166c0,3.707,3.707,6.747,8.33,6.747a8.339,8.339,0,0,0,8.621-8c0-3.832-3.082-6.831-7.08-7.539a7.849,7.849,0,0,0,5.956-7.33c0-3.29-3.415-5.706-7.455-5.706-4.166.004-7.248,2.544-7.248,5.584a1.89777,1.89777,0,0,0,3.79.20485q.00086-.03942,0-.07885a1.83,1.83,0,0,0-1.73975-1.916q-.08808-.00424-.17625,0a1.3,1.3,0,0,0-.458.042c1.583-2.833,5.495-2.833,5.706-2.833,1.374,0,4.082.625,4.082,4.706a9.39993,9.39993,0,0,1-1.333,4.915,4.2,4.2,0,0,1-3.79,2Z"/><path id="Path_11" data-name="Path 11" class="cls-1" d="M312.32867,45.96793c0-8.518-1.5-20.576-9.358-30.713-.6-.72-4.5-5.279-5.579-5.279-.3,0-.72.12-.72.6a.73.73,0,0,0,.36.6c2.879,3.119,6.779,7.978,9.238,17.516a72.50786,72.50786,0,0,1,1.92,17.218,70.44907,70.44907,0,0,1-2.1,18.056,37.93208,37.93208,0,0,1-8.878,16.555c-.54.54-.54.66-.54.78,0,.48.42.6.72.6.9,0,4.2-3.659,4.919-4.5C308.42967,70.14293,312.32867,59.34493,312.32867,45.96793Z"/><path id="Path_12" data-name="Path 12" class="cls-1" d="M344.14169,47.04793h15.9c.84,0,1.86,0,1.86-1.02,0-1.08-.96-1.08-1.86-1.08h-15.9v-15.9c0-.84,0-1.86-1.02-1.86-1.08,0-1.08.96-1.08,1.86v15.9h-15.896c-.84,0-1.86,0-1.86,1.02,0,1.08.96,1.08,1.86,1.08h15.9v15.9c0,.84,0,1.86,1.02,1.86,1.08,0,1.08-.96,1.08-1.86Z"/><rect id="Rectangle_28" data-name="Rectangle 28" class="cls-1" x="368.17866" y="44.76893" width="20.391" height="2.399"/><path id="Path_14" data-name="Path 14" class="cls-1" d="M386.50367,74.65393h-.916a16.19432,16.19432,0,0,1-.875,3.665c-.292.375-2.666.375-3.915.375h-7.705c1.125-.959,3.665-3.623,4.748-4.623,6.331-5.831,8.663-8,8.663-12.12,0-4.79-3.79-8-8.621-8a7.714,7.714,0,0,0-7.664,7.709,1.96164,1.96164,0,1,0,3.915.2397q.00069-.03684,0-.0737a1.858,1.858,0,0,0-1.957-1.957,1.74076,1.74076,0,0,0-.583.042,6.077,6.077,0,0,1,5.747-4.749c3.54,0,5.706,2.957,5.706,6.789,0,3.54-2.041,6.622-4.415,9.288l-8.413,9.413v1h15.206Z"/><path id="Path_15" data-name="Path 15" class="cls-1" d="M426.81267,81.30093a.893.893,0,0,0-.24-.54c-2.759-2.939-6.839-7.8-9.358-17.576a72.50851,72.50851,0,0,1-1.92-17.216c0-15.777,3.779-26.814,10.978-34.613.54-.54.54-.66.54-.78,0-.6-.48-.6-.72-.6-.9,0-4.139,3.6-4.919,4.5-6.119,7.258-10.018,18.055-10.018,31.434,0,8.518,1.5,20.576,9.358,30.713.6.72,4.5,5.279,5.579,5.279C426.33267,81.90093,426.81267,81.90093,426.81267,81.30093Z"/><path id="Path_16" data-name="Path 16" class="cls-1" d="M457.96566,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939,1.89,1.89,0,0,0-1.85367-1.92565q-.09324-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.56594-.54179l-.03406.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,457.96566,36.49093Z"/><path id="Path_17" data-name="Path 17" class="cls-1" d="M474.90469,43.26593c0-.958,0-1-.833-1-1,1.125-3.082,2.666-7.372,2.666v1.208a12.01116,12.01116,0,0,0,5.331-1.083v21.7c0,1.5-.125,2-3.79,2h-1.291v1.208c1.125-.083,5.165-.083,6.539-.083s5.373,0,6.5.083v-1.209h-1.294c-3.665,0-3.79-.5-3.79-2Z"/><path id="Path_18" data-name="Path 18" class="cls-1" d="M503.07166,32.19893h-.916a16.19379,16.19379,0,0,1-.875,3.665c-.292.375-2.666.375-3.915.375h-7.705c1.125-.959,3.665-3.623,4.748-4.623,6.331-5.831,8.663-8,8.663-12.12,0-4.79-3.79-8-8.621-8a7.714,7.714,0,0,0-7.664,7.709,1.96164,1.96164,0,1,0,3.915.23971q.00069-.03686,0-.07371a1.858,1.858,0,0,0-1.957-1.957,1.74076,1.74076,0,0,0-.583.042,6.077,6.077,0,0,1,5.747-4.749c3.54,0,5.706,2.957,5.706,6.789,0,3.54-2.041,6.622-4.415,9.288l-8.413,9.413v1h15.206Z"/><path id="Path_19" data-name="Path 19" class="cls-1" d="M559.4457,47.17293c1.02,0,2.1,0,2.1-1.2s-1.08-1.2-2.1-1.2h-32.454c-1.02,0-2.1,0-2.1,1.2s1.08,1.2,2.1,1.2Z"/><path id="Path_20" data-name="Path 20" class="cls-1" d="M608.33468,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939,1.89,1.89,0,0,0-1.85367-1.92565q-.09324-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.56594-.54179l-.03406.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,608.33468,36.49093Z"/><path id="Path_21" data-name="Path 21" class="cls-1" d="M631.93868,56.63593c0-3.457-.208-6.831-1.708-10a7.42611,7.42611,0,0,0-13.661.295c-1.166,2.624-1.582,5.207-1.582,9.705,0,4.04.292,7.08,1.791,10.038a7.406,7.406,0,0,0,6.664,4.164c3.624,0,5.706-2.166,6.914-4.581C631.85568,63.13293,631.93868,59.04693,631.93868,56.63593Zm-8.5,13.37c-1.333,0-4.04-.75-4.831-5.29a51.327,51.327,0,0,1-.458-8.58,36.46476,36.46476,0,0,1,.673-8.955,4.984,4.984,0,0,1,4.62-4.081c1.583,0,4,.958,4.79,4.54a42.47515,42.47515,0,0,1,.541,8.5,51.31449,51.31449,0,0,1-.458,8.5c-.793,4.574-3.416,5.365-4.873,5.365Z"/><path id="Path_22" data-name="Path 22" class="cls-1" d="M653.44166,32.19893h-.916a16.19432,16.19432,0,0,1-.875,3.665c-.292.375-2.666.375-3.915.375h-7.705c1.125-.959,3.665-3.623,4.748-4.623,6.331-5.831,8.663-8,8.663-12.12,0-4.79-3.79-8-8.621-8a7.714,7.714,0,0,0-7.664,7.709,1.96163,1.96163,0,1,0,3.915.23971q.0007-.03686,0-.07371a1.858,1.858,0,0,0-1.957-1.957,1.74072,1.74072,0,0,0-.583.042,6.077,6.077,0,0,1,5.747-4.749c3.54,0,5.706,2.957,5.706,6.789,0,3.54-2.041,6.622-4.415,9.288l-8.413,9.413v1h15.206Z"/><path id="Path_23" data-name="Path 23" class="cls-1" d="M675.24868,45.96793c0-8.518-1.5-20.576-9.358-30.713-.6-.72-4.5-5.279-5.579-5.279-.3,0-.72.12-.72.6a.73.73,0,0,0,.36.6c2.879,3.119,6.779,7.978,9.238,17.516a72.50786,72.50786,0,0,1,1.92,17.218,70.44863,70.44863,0,0,1-2.1,18.056,37.932,37.932,0,0,1-8.878,16.555c-.54.54-.54.66-.54.78,0,.48.42.6.72.6.9,0,4.2-3.659,4.919-4.5C671.34968,70.14293,675.24868,59.34493,675.24868,45.96793Z"/><path id="Path_24" data-name="Path 24" class="cls-1" d="M707.06268,47.04793h15.9c.84,0,1.86,0,1.86-1.02,0-1.08-.96-1.08-1.86-1.08h-15.9v-15.9c0-.84,0-1.86-1.02-1.86-1.08,0-1.08.96-1.08,1.86v15.9h-15.896c-.84,0-1.86,0-1.86,1.02,0,1.08.96,1.08,1.86,1.08h15.9v15.9c0,.84,0,1.86,1.02,1.86,1.08,0,1.08-.96,1.08-1.86Z"/><path id="Path_27" data-name="Path 27" class="cls-1" d="M811.00466,75.60093a.467.467,0,0,0-.18-.36c-2.76-2.819-10.138-10.498-10.138-29.214s7.259-26.334,10.198-29.333c0-.06.12-.18.12-.36s-.18-.3-.42-.3c-.66,0-5.759,4.439-8.7,11.038a45.27309,45.27309,0,0,0-3.839,18.895,45.58009,45.58009,0,0,0,4.021,19.376c2.879,6.239,7.798,10.618,8.518,10.618C810.88466,75.96093,811.00466,75.84093,811.00466,75.60093Z"/><path id="Path_28" data-name="Path 28" class="cls-1" d="M842.32565,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939,1.89,1.89,0,0,0-1.85367-1.92565q-.09326-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.566-.54179l-.034.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,842.32565,36.49093Z"/><path id="Path_29" data-name="Path 29" class="cls-1" d="M859.2647,43.26593c0-.958,0-1-.833-1-1,1.125-3.082,2.666-7.372,2.666v1.208a12.01116,12.01116,0,0,0,5.331-1.083v21.7c0,1.5-.125,2-3.79,2h-1.291v1.208c1.125-.083,5.165-.083,6.539-.083s5.373,0,6.5.083v-1.209h-1.294c-3.665,0-3.79-.5-3.79-2Z"/><path id="Path_30" data-name="Path 30" class="cls-1" d="M921.96865,47.17293c1.02,0,2.1,0,2.1-1.2s-1.08-1.2-2.1-1.2h-32.454c-1.02,0-2.1,0-2.1,1.2s1.08,1.2,2.1,1.2Z"/><path id="Path_31" data-name="Path 31" class="cls-1" d="M970.85769,36.49093a3,3,0,0,0-2.639,2.939,1.857,1.857,0,0,0,1.98,1.92,3.135,3.135,0,0,0,3.059-3.179c0-2.519-2.879-3.659-5.4-3.659-3.659,0-5.7,3.6-6.239,4.739a6.213,6.213,0,0,0-6.178-4.743c-6.119,0-9.358,7.858-9.358,9.178a.612.612,0,0,0,.66.54c.48,0,.6-.36.72-.6,2.04-6.659,6.059-7.918,7.8-7.918,2.7,0,3.239,2.519,3.239,3.959a25.0419,25.0419,0,0,1-1.081,5.582l-2.04,8.218c-.9,3.6-2.639,6.9-5.819,6.9a6.063,6.063,0,0,1-3.059-.78,3.1,3.1,0,0,0,2.639-2.939,1.89,1.89,0,0,0-1.85367-1.92565q-.09324-.00177-.18633.00565a3.127,3.127,0,0,0-3,3.179c0,2.519,2.819,3.659,5.4,3.659,2.879,0,4.919-2.28,6.179-4.739a6.269,6.269,0,0,0,6.179,4.739c6.119,0,9.358-7.858,9.358-9.178a.554.554,0,0,0-.56594-.54179l-.03406.00179c-.54,0-.6.3-.78.78-1.62,5.279-5.1,7.738-7.8,7.738-2.1,0-3.239-1.56-3.239-4.019,0-1.32.24-2.28,1.2-6.239l2.1-8.158c.9-3.6,2.939-6.239,5.7-6.239A6.449,6.449,0,0,1,970.85769,36.49093Z"/><path id="Path_32" data-name="Path 32" class="cls-1" d="M994.46065,56.63593c0-3.457-.208-6.831-1.708-10a7.42611,7.42611,0,0,0-13.661.295c-1.166,2.624-1.582,5.207-1.582,9.705,0,4.04.292,7.08,1.791,10.038a7.406,7.406,0,0,0,6.664,4.164c3.624,0,5.706-2.166,6.914-4.581C994.37765,63.13293,994.46065,59.04693,994.46065,56.63593Zm-8.5,13.37c-1.333,0-4.04-.75-4.831-5.29a51.3281,51.3281,0,0,1-.458-8.58,36.46476,36.46476,0,0,1,.673-8.955,4.984,4.984,0,0,1,4.62-4.081c1.583,0,4,.958,4.79,4.54a42.47515,42.47515,0,0,1,.541,8.5,51.31341,51.31341,0,0,1-.458,8.5c-.793,4.574-3.416,5.365-4.873,5.365Z"/><path id="Path_33" data-name="Path 33" class="cls-1" d="M1013.4157,46.02693a45.5799,45.5799,0,0,0-4.02-19.375c-2.879-6.239-7.8-10.618-8.518-10.618-.18,0-.42.06-.42.36,0,.12.06.18.12.3,2.879,3,10.2,10.618,10.2,29.274,0,18.716-7.258,26.334-10.2,29.334-.06.12-.12.18-.12.3,0,.3.24.36.42.36.66,0,5.759-4.439,8.7-11.038A45.273,45.273,0,0,0,1013.4157,46.02693Z"/></g><g id="A_Number" data-name="A Number"><g id="Rectangle_3" data-name="Rectangle 3"><rect class="cls-2" x="0.90767" y="-0.00202" width="36" height="38"/><rect class="cls-2" x="1.40767" y="0.49798" width="35" height="37"/></g><g id="A" class="cls-3"><text class="cls-4" transform="translate(12.90765 25.99797)">A</text></g></g><g id="A_Number-2" data-name="A Number-2"><g id="Rectangle_3-2" data-name="Rectangle 3-2"><rect class="cls-2" x="360.90768" y="-0.00202" width="36" height="38"/><rect class="cls-2" x="361.40768" y="0.49798" width="35" height="37"/></g><g id="B" class="cls-3"><text class="cls-4" transform="translate(372.90767 25.99797)">B</text></g></g><g id="A_Number-3" data-name="A Number-3"><g id="Rectangle_3-3" data-name="Rectangle 3-3"><rect class="cls-2" x="733.90767" y="11.99798" width="55" height="59"/><rect class="cls-2" x="734.40767" y="12.49798" width="54" height="58"/></g><g id="C" class="cls-3"><text class="cls-5" transform="translate(751.90765 50.99797)">C</text></g></g></svg>
\ No newline at end of file
This diff is collapsed.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1359.29021 360.63144"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#ff500b;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_11" data-name="Layer 11"><path class="cls-1" d="M0,2.92629H54.7991V149.235h80.33659v46.28661H0Z"/><path class="cls-1" d="M140.98318,2.92629h54.7991V195.52163h-54.7991Z"/><path class="cls-1" d="M365.762,240.21191c-22.87757-11.43815-43.36032-27.39955-57.99113-41.764-57.19328-.79785-101.35208-44.1588-101.35208-99.22364C206.41877,43.62669,251.37542,0,309.36655,0,367.35831,0,412.315,43.62669,412.315,99.22428c0,36.70989-19.95128,68.1-49.2129,85.12494v.53147a418.21755,418.21755,0,0,0,51.60708,27.40019ZM309.36655,149.235c27.13381,0,48.14867-22.07908,48.14867-50.01074S336.50036,49.2129,309.36655,49.2129c-27.13318,0-48.14868,22.07972-48.14868,50.01138S282.23337,149.235,309.36655,149.235Z"/><path class="cls-1" d="M599.58284,104.27837c0,29.26162-5.58684,49.47864-16.2265,63.57734-14.36508,19.15343-40.70041,30.59221-72.88832,30.59221-31.65579,0-59.32172-10.90667-73.95253-31.39006-10.10819-14.0987-15.16292-34.58209-15.16292-62.77949V2.92629h54.7991v98.16006c0,18.62068,2.12845,29.52735,7.44891,36.97626,5.31984,7.44828,14.63081,12.76811,27.93166,12.76811,11.97026,0,20.74913-4.25561,26.33534-11.17241,6.11831-7.44828,9.0446-19.68491,9.0446-38.572V2.92629h52.67066Z"/><path class="cls-1" d="M711.56632,0c57.99177,0,102.94842,43.62669,102.94842,99.22428,0,55.597-44.95665,99.22364-102.94842,99.22364-57.99049,0-102.94714-43.62669-102.94714-99.22364C608.61918,43.62669,653.57583,0,711.56632,0Zm0,149.235c27.13445,0,48.14932-22.07908,48.14932-50.01074S738.70077,49.2129,711.56632,49.2129c-27.13317,0-48.148,22.07972-48.148,50.01138S684.43315,149.235,711.56632,149.235Z"/><path class="cls-1" d="M825.148,2.92629h67.30275c23.409,0,40.69976,2.92629,54.00062,9.57671,18.62068,9.04461,31.12432,25.27175,31.12432,50.27712,0,23.67542-11.43942,41.764-35.38121,51.87281l51.075,80.8687H931.28912l-42.82948-73.154h-8.51249v73.154H825.148Zm68.3657,81.93292q15.16419,0,21.5476-3.99051c5.0541-2.92566,7.71529-7.98039,7.71529-15.16292,0-8.24613-3.72541-13.30022-9.311-15.96077-4.52262-2.12781-10.90667-3.192-23.409-3.192H879.94715V84.85921Z"/><path class="cls-1" d="M990.07174,2.92629h54.7991V195.52163h-54.7991Z"/><path class="cls-1" d="M1219.37252,187.00914c-17.025,7.98038-37.50837,11.43878-55.86332,11.43878-64.64155,0-108.00251-43.09458-108.00251-98.95791,0-56.92754,44.95665-99.49,108.00251-99.49,19.15343,0,37.77411,3.99051,53.20341,10.90667V64.64219c-14.09934-8.77887-33.25277-15.9614-52.13919-15.9614-32.45428,0-54.26763,21.0155-54.26763,50.27711,0,27.93167,20.21765,50.80923,55.33185,50.80923,18.88642,0,37.50838-6.65042,53.73488-16.75925Z"/><path class="cls-1" d="M1230.53858,2.92629h125.559V49.2129h-70.75987V73.68679h59.8532v43.62606h-59.8532V149.235h73.95253v46.28661H1230.53858Z"/><path class="cls-2" d="M495.78971,350.83821c-12.61793,6.027-29.37875,9.79323-45.76342,9.79323-46.32882,0-77.21454-29.75631-77.21454-69.49276,0-40.49064,32.20391-71.00021,76.46129-71.00021a95.26334,95.26334,0,0,1,41.99715,9.60538v37.47669c-12.053-7.34468-26.74284-12.61745-40.49064-12.61745-24.2943,0-39.17245,16.00709-39.17245,36.53559,0,20.15093,14.50153,36.72343,38.41919,36.72343a35.87969,35.87969,0,0,0,8.28626-.94109V312.41949H439.66812V283.98183h56.12159Z"/><path class="cls-2" d="M507.0885,222.20991h88.89044v32.7698H545.88385v17.32576h42.37378v30.8862H545.88385v22.59947H598.2387v32.76839H507.0885Z"/><path class="cls-2" d="M664.52685,309.21769c-7.53253-10.16985-14.124-19.39767-20.90418-29.1909l-.37663.18878c.18879,11.48758.37663,23.16394.37663,34.65246v43.6915H606.33382V222.20991h36.34775l36.159,49.34231c7.53253,10.16986,14.124,19.39768,20.90418,29.1909l.37663-.18878c-.18878-11.48758-.37663-23.16394-.37663-34.65152V222.20991h37.28885V358.55953H700.68582Z"/></g></g></svg>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment