Changeset - 630bf4086135
.gitlab-ci.yml
Show inline comments
 
stages:
 
  - build
 
  - deploy
 

	
 
variables:
 
  DOCKER_TLS_CERTDIR: "/certs"
 
  CONTAINER_PREFIX: 2022
 
  CONTAINER_PREFIX: 2023
 
  CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/$CONTAINER_PREFIX:$CI_COMMIT_SHA
 

	
 
build-image:
 
  image: docker:git
 
  stage: build
 
  services:
 
  - docker:dind
 
  script:
 
    - apk update && apk add git
 
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
 
    - docker build --pull -f docker/Dockerfile -t $CONTAINER_IMAGE .
 
    - docker push $CONTAINER_IMAGE
 
  only:
 
    - "2022"
 
    - conf/2023
 

	
 
k8s-deploy-staging:
 
  image: google/cloud-sdk
 
  stage: deploy
 
  script:
 
  - echo "${CA_CERT}" > cert.crt
 
  - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt
 
  - kubectl config set-context cluster --cluster=cluster --namespace=lca2022-staging --user=gitlab-ci
 
  - kubectl config set-context cluster --cluster=cluster --namespace=eo2023-staging --user=gitlab-ci
 
  - kubectl config use-context cluster
 
  - kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE
 
  when: manual
 
  only:
 
  - dev/2022
 
  - dev/2023
 
  environment:
 
    name: 2022/staging
 
    url: https://staging-lca2022.gc2020.org/
 
    name: 2023/staging
 
    url: https://staging-eo2023.osaconftools.net/
 

	
 
k8s-deploy-prod:
 
  image: google/cloud-sdk
 
  stage: deploy
 
  script:
 
  - echo "${CA_CERT}" > cert.crt
 
  - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt
 
  - kubectl config set-context cluster --cluster=cluster --namespace=lca2022-prod --user=gitlab-ci
 
  - kubectl config set-context cluster --cluster=cluster --namespace=eo2023-prod --user=gitlab-ci
 
  - kubectl config use-context cluster
 
  - kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE
 
  when: manual
 
  only:
 
  - "2022"
 
  - conf/2023
 
  environment:
 
    name: 2022/prod
 
    url: https://lca2022.linux.org.au
 
    name: 2023/prod
 
    url: https://2023.everythingopen.au/
 

	
 
.docs_template: &sphinx
 
  image: alpine
 
  script:
 
  - apk --no-cache add py3-pip python3-dev make
 
  - pip install sphinx
 
  - cd docs
 
  - make html
 
  - cd ..
 
  - mv docs/_build/html public
 
  artifacts:
 
    paths:
 
    - public
 

	
 
pages:
 
  <<: *sphinx
 
  stage: build
 
  only:
 
  - master
 
  - "2022"
 
  - conf/2023
 
  environment:
 
    name: docs
 
    url: https://laconfdev.gitlab.io/symposion_app/
 

	
 
build-sphinx:
 
  <<: *sphinx
 
  stage: build
 
  except:
 
  - master
 
  - "2022"
 
  - conf/2023
fixtures/2022/auth.permission.json
Show inline comments
 
deleted file
fixtures/2022/conference.section.json
Show inline comments
 
deleted file
fixtures/2022/proposals.proposalsection.json
Show inline comments
 
deleted file
fixtures/conference.json
Show inline comments
 
[
 
{
 
  "model": "symposion_conference.conference",
 
  "pk": 1,
 
  "fields": {
 
    "title": "linux.conf.au 2022",
 
    "start_date": "2022-01-14",
 
    "end_date": "2022-01-16",
 
    "timezone": "Australia/Canberra"
 
    "title": "Everything Open 2023",
 
    "start_date": "2023-03-14",
 
    "end_date": "2023-03-16",
 
    "timezone": "Australia/Melbourne"
 
  }
 
}
 
]
fixtures/flatpages.json
Show inline comments
 
[
 
{
 
  "model": "flatpages.flatpage",
 
  "pk": 1,
 
  "fields": {
 
    "url": "/",
 
    "title": "Home Page",
 
    "content": "Here is the home page for LCA.\r\n\r\nOther pages to come.",
 
    "content": "Here is the home page.\r\n\r\nOther pages to come.",
 
    "enable_comments": false,
 
    "template_name": "",
 
    "registration_required": false,
 
    "sites": [
 
      1
 
    ]
 
  }
 
}
 
]
fixtures/sessions/auth.group.json
Show inline comments
 
file renamed from fixtures/2022/auth.group.json to fixtures/sessions/auth.group.json
fixtures/sessions/auth.permission.json
Show inline comments
 
new file 100644
 
[
 
{
 
  "model": "auth.permission",
 
  "fields": {
 
    "name": "Can review Main Conference",
 
    "content_type": [
 
      "reviews",
 
      ""
 
    ],
 
    "codename": "can_review_main"
 
  }
 
},
 
{
 
  "model": "auth.permission",
 
  "fields": {
 
    "name": "Can manage Main Conference",
 
    "content_type": [
 
      "reviews",
 
      ""
 
    ],
 
    "codename": "can_manage_main"
 
  }
 
}
 
]
fixtures/sessions/conference.section.json
Show inline comments
 
new file 100644
 
[
 
{
 
  "model": "symposion_conference.section",
 
  "pk": 1,
 
  "fields": {
 
    "conference": 1,
 
    "name": "Main Conference",
 
    "slug": "main",
 
    "start_date": "2023-03-14",
 
    "end_date": "2023-03-16"
 
  }
 
}
 
]
fixtures/sessions/proposals.proposalkind.json
Show inline comments
 
file renamed from fixtures/2022/proposals.proposalkind.json to fixtures/sessions/proposals.proposalkind.json
 
[
 
{
 
  "model": "symposion_proposals.proposalkind",
 
  "pk": 1,
 
  "fields": {
 
    "section": 1,
 
    "name": "Talk",
 
    "slug": "talk"
 
  }
 
},
 
{
 
  "model": "symposion_proposals.proposalkind",
 
  "pk": 3,
 
  "pk": 2,
 
  "fields": {
 
    "section": 2,
 
    "name": "Miniconf",
 
    "slug": "miniconf"
 
    "section": 1,
 
    "name": "Tutorial",
 
    "slug": "tutorial"
 
  }
 
}
 
]
fixtures/sessions/proposals.proposalsection.json
Show inline comments
 
new file 100644
 
[
 
{
 
  "model": "symposion_proposals.proposalsection",
 
  "pk": 1,
 
  "fields": {
 
    "section": 1,
 
    "start": "2022-12-07T12:00:00Z",
 
    "end": "2023-01-09T12:00:00Z",
 
    "closed": false,
 
    "published": true
 
  }
 
}
 
]
fixtures/sessions/teams.team.json
Show inline comments
 
file renamed from fixtures/2022/teams.team.json to fixtures/sessions/teams.team.json
 
[
 
{
 
  "model": "teams.team",
 
  "pk": 1,
 
  "fields": {
 
    "slug": "main-proposals",
 
    "name": "linux.conf.au Sessions Team",
 
    "description": "Team looking after the linux.conf.au Call for Sessions",
 
    "name": "Sessions Team",
 
    "description": "Team looking after the Call for Sessions",
 
    "access": "invitation",
 
    "created": "2019-06-23T08:16:34.032Z",
 
    "permissions": [
 
      [
 
        "can_review_main",
 
        "reviews",
 
        ""
 
      ],
 
      [
 
        "can_review_miniconf",
 
        "reviews",
 
        ""
 
      ]
 
    ],
 
    "manager_permissions": [
 
      [
 
        "can_manage_main",
 
        "reviews",
 
        ""
 
      ],
 
      [
 
        "can_review_main",
 
        "reviews",
 
        ""
 
      ]
 
    ]
 
  }
 
},
 
{
 
  "model": "teams.team",
 
  "pk": 2,
 
  "fields": {
 
    "slug": "organising-team",
 
    "name": "linux.conf.au Organising Team",
 
    "description": "The organising team for linux.conf.au",
 
    "name": "Organising Team",
 
    "description": "The conference organising team",
 
    "access": "invitation",
 
    "created": "2019-08-26T22:59:09.265Z",
 
    "permissions": [
 
      [
 
        "can_review_main",
 
        "reviews",
 
        ""
 
      ],
 
      [
 
        "can_review_miniconf",
 
        "reviews",
 
        ""
 
      ]
 
    ],
 
    "manager_permissions": []
 
  }
 
}
 
]
fixtures/sites.json
Show inline comments
 
[
 
{
 
  "model": "sites.site",
 
  "pk": 1,
 
  "fields": {
 
    "domain": "lca2022.linux.org.au",
 
    "name": "linux.conf.au 2022"
 
    "domain": "2023.everythingopen.au",
 
    "name": "Everything Open 2023"
 
  }
 
}
 
]
fixtures/sitetree.json
Show inline comments
 
[
 
{
 
  "model": "sitetree.tree",
 
  "pk": 1,
 
  "fields": {
 
    "title": "main",
 
    "alias": "main"
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 1,
 
  "fields": {
 
    "title": "Home",
 
    "hint": "",
 
    "url": "/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 1,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 2,
 
  "fields": {
 
    "title": "About",
 
    "hint": "",
 
    "url": "#",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 2,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 3,
 
  "fields": {
 
    "title": "Programme",
 
    "hint": "",
 
    "url": "#",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 5,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 4,
 
  "fields": {
 
    "title": "Sponsors",
 
    "hint": "",
 
    "url": "/sponsors/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 8,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 5,
 
  "fields": {
 
    "title": "News",
 
    "hint": "",
 
    "url": "/news/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 3,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 6,
 
  "fields": {
 
    "title": "About LCA2022",
 
    "title": "About Everything Open",
 
    "hint": "",
 
    "url": "/about/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 2,
 
    "sort_order": 6,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 7,
 
  "fields": {
 
    "title": "Location",
 
    "hint": "",
 
    "url": "/about/location/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 2,
 
    "sort_order": 7,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 8,
 
  "fields": {
 
    "title": "Attend",
 
    "hint": "",
 
    "url": "#",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 4,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 9,
 
  "fields": {
 
    "title": "Dashboard",
 
    "hint": "",
 
    "url": "/dashboard",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 9,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 10,
 
  "fields": {
 
    "title": "Code of Conduct",
 
    "hint": "",
 
    "url": "/attend/code-of-conduct/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 22,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 11,
 
  "fields": {
 
    "title": "Terms and Conditions",
 
    "hint": "",
 
    "url": "/attend/terms-and-conditions/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 23,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 12,
 
  "fields": {
 
    "title": "Overview",
 
    "hint": "",
 
    "url": "/programme/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 3,
 
    "sort_order": 12,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 13,
 
  "fields": {
 
    "title": "Miniconfs",
 
    "hint": "",
 
    "url": "/programme/miniconfs/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 3,
 
    "sort_order": 13,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 14,
 
  "fields": {
 
    "title": "Sessions",
 
    "hint": "",
 
    "url": "/programme/sessions/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 3,
 
    "sort_order": 14,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 15,
 
  "fields": {
 
    "title": "Proposals",
 
    "hint": "",
 
    "url": "/programme/proposals/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 3,
 
    "sort_order": 15,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 16,
 
  "fields": {
 
    "title": "Admin",
 
    "hint": "",
 
    "url": "#",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": true,
 
    "access_perm_type": 1,
 
    "parent": null,
 
    "sort_order": 16,
 
    "access_permissions": [
 
      52,
 
      19
 
    ]
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 17,
 
  "fields": {
 
    "title": "django admin",
 
    "hint": "",
 
    "url": "/admin",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": true,
 
    "access_perm_type": 1,
 
    "parent": 16,
 
    "sort_order": 17,
 
    "access_permissions": [
 
      52
 
    ]
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 18,
 
  "fields": {
 
    "title": "Ticket Reports",
 
    "hint": "",
 
    "url": "/tickets/reports/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": true,
 
    "access_perm_type": 1,
 
    "parent": 16,
 
    "sort_order": 18,
 
    "access_permissions": [
 
      52
 
    ]
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 19,
 
  "fields": {
 
    "title": "Schedule Edit",
 
    "hint": "",
 
    "url": "/schedule/edit",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": true,
 
    "access_perm_type": 1,
 
    "parent": 16,
 
    "sort_order": 19,
 
    "access_permissions": [
 
      106,
 
      107,
 
      108
 
    ]
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 20,
 
  "fields": {
 
    "title": "Tickets",
 
    "hint": "",
 
    "url": "/attend/tickets/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 10,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 21,
 
  "fields": {
 
    "title": "Volunteer",
 
    "hint": "",
 
    "url": "/attend/volunteer/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 11,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 22,
 
  "fields": {
 
    "title": "Accommodation",
 
    "hint": "",
 
    "url": "/attend/accommodation/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 20,
 
    "access_permissions": []
 
  }
 
},
 
{
 
  "model": "sitetree.treeitem",
 
  "pk": 23,
 
  "fields": {
 
    "title": "Why should employees attend?",
 
    "hint": "",
 
    "url": "/attend/why-should-employees-attend/",
 
    "urlaspattern": false,
 
    "tree": 1,
 
    "hidden": false,
 
    "alias": null,
 
    "description": "",
 
    "inmenu": true,
 
    "inbreadcrumbs": true,
 
    "insitetree": true,
 
    "access_loggedin": false,
 
    "access_guest": false,
 
    "access_restricted": false,
 
    "access_perm_type": 1,
 
    "parent": 8,
 
    "sort_order": 21,
 
    "access_permissions": []
 
  }
 
}
 
]
k8s/deployment_template.jsonnet
Show inline comments
 
function (slug, sha) {
 

	
 
  local app = "symposion-app-" + slug,
 
  local namespace = "rego-review",
 
  local domain = slug + ".dev.lca2019.org",
 
  local tls_secret = slug + "-tls",
 

	
 
  "deployment.json":
 
    {
 
      "apiVersion": "v1",
 
      "items": [
 
        {
 
          "apiVersion": "v1",
 
          "kind": "Service",
 
          "metadata": {
 
            "labels": {
 
              "app":  app,
 
              "slug": slug
 
            },
 
            "name": app,
 
            "namespace": namespace
 
          },
 
          "spec": {
 
            "ports": [
 
              {
 
                "port": 8000,
 
                "protocol": "TCP",
 
                "targetPort": 8000
 
              }
 
            ],
 
            "selector": {
 
              "app": app,
 
              "slug": slug
 
            },
 
            "sessionAffinity": "None",
 
            "type": "ClusterIP"
 
          }
 
        },
 
        {
 
          "apiVersion": "extensions/v1beta1",
 
          "kind": "Deployment",
 
          "metadata": {
 
            "labels": {
 
              "app": app,
 
              "slug": slug,
 
            },
 
            "name": app,
 
            "namespace": namespace
 
          },
 
          "spec": {
 
            "replicas": 1,
 
            "revisionHistoryLimit": 1,
 
            "selector": {
 
              "matchLabels": {
 
                "app": app,
 
                "slug": slug
 
              }
 
            },
 
            "strategy": {
 
              "rollingUpdate": {
 
                "maxSurge": 1,
 
                "maxUnavailable": 1
 
              },
 
              "type": "RollingUpdate"
 
            },
 
            "template": {
 
              "metadata": {
 
                "labels": {
 
                  "app": app,
 
                  "slug": slug
 
                }
 
              },
 
              "spec": {
 
                "containers": [
 
                  {
 
                    "env": [
 
                      {
 
                        "name": "SYMPOSION_APP_DEBUG",
 
                        "value": "1"
 
                      },
 
                      {
 
                        "name": "DJANGO_SECRET_KEY",
 
                        "value": "paGhahQuain5ohYoh0moorai"
 
                      },
 
                      {
 
                        "name": "DATABASE_URL",
 
                        "value": "sqlite:////tmp/symposion.sqlite"
 
                      },
 
                      {
 
                        "name": "GCS_BUCKET",
 
                        "value": "CEA51A5-A613-4AEF-A9FB-D0A57D77C13B"
 
                      },
 
                      {
 
                        "name": "GOOGLE_APPLICATION_CREDENTIALS",
 
                        "value": "/dev/null"
 
                      },
 
                      {
 
                        "name": "STRIPE_PUBLIC_KEY",
 
                        "valueFrom": {
 
                          "secretKeyRef": {
 
                            "key": "STRIPE_PUBLIC_KEY",
 
                            "name": "symposion-app-config"
 
                          }
 
                        }
 
                      },
 
                      {
 
                        "name": "STRIPE_SECRET_KEY",
 
                        "valueFrom": {
 
                          "secretKeyRef": {
 
                            "key": "STRIPE_SECRET_KEY",
 
                            "name": "symposion-app-config"
 
                          }
 
                        }
 
                      },
 
                      {
 
                        "name": "SYMPOSION_DEV_MODE",
 
                        "value": "LAPTOP"
 
                      },
 
                      {
 
                        "name": "ANALYTICS_KEY",
 
                        "value": "UA-000000000-1"
 
                      }
 
                    ],
 
                    "image": "asia.gcr.io/linuxconfsydney/symposion_app_2022_dev:" + sha,
 
                    "image": "registry.gitlab.com/laconfdev/symposion_app/2023:" + sha,
 
                    "imagePullPolicy": "Always",
 
                    "livenessProbe": {
 
                      "failureThreshold": 3,
 
                      "httpGet": {
 
                        "path": "/admin/login/",
 
                        "port": 8000,
 
                        "scheme": "HTTP"
 
                      },
 
                      "initialDelaySeconds": 180,
 
                      "periodSeconds": 10,
 
                      "successThreshold": 1,
 
                      "timeoutSeconds": 5
 
                    },
 
                    "name": app,
 
                    "ports": [
 
                      {
 
                        "containerPort": 8000,
 
                        "protocol": "TCP"
 
                      }
 
                    ],
 
                    "resources": {},
 
                    "terminationMessagePath": "/dev/termination-log",
 
                    "terminationMessagePolicy": "File"
 
                  }
 
                ],
 
                "dnsPolicy": "ClusterFirst",
 
                "restartPolicy": "Always",
 
                "schedulerName": "default-scheduler",
 
                "securityContext": {},
 
                "terminationGracePeriodSeconds": 30
 
              }
 
            }
 
          }
 
        }
 
      ],
 
      "kind": "List"
 
    },
 
  "ingress.json":
 
    {
 
        "kind": "Ingress",
 
        "apiVersion": "extensions/v1beta1",
 
        "metadata": {
 
            "name": app,
 
            "namespace": namespace,
 
            "annotations": {
 
                "kubernetes.io/ingress.class": "nginx-review",
 
            }
 
        },
 
        "spec": {
 
            "backend": {
 
                "serviceName": app,
 
                "servicePort": 80
 
            },
 
            "tls": [
 
                {
 
                    "hosts": [
 
                        domain
 
                    ],
 
                    "secretName": tls_secret,
 
                }
 
            ],
 
            "rules": [
 
                {
 
                    "host": domain,
 
                    "http": {
 
                        "paths": [
 
                            {
 
                                "path": "/",
 
                                "backend": {
 
                                    "serviceName": app,
 
                                    "servicePort": 8000
 
                                }
 
                            }
 
                        ]
 
                    }
 
                }
 
            ]
 
        }
 
    },
 
  "certificate.json":
 
    {
 
      "apiVersion": "certmanager.k8s.io/v1alpha1",
 
      "kind": "Certificate",
 
      "metadata": {
 
        "name": slug,
 
        "namespace": "rego-review",
 
      },
 
      "spec": {
 
        "acme": {
 
          "config": [
 
            {
 
              "domains": [
 
                domain
 
                    ],
 
              "http01": {
 
                      "ingressClass": "nginx-review"
 
                    }
 
                }
 
            ]
 
        },
 
        "commonName": "",
 
        "dnsNames": [
 
            domain
 
        ],
 
        "issuerRef": {
 
            "kind": "ClusterIssuer",
 
            "name": "letsencrypt-prod"
 
        },
 
        "secretName": tls_secret
 
      }
 
    }
 
}
make_dev_container.sh
Show inline comments
 
#!/bin/bash -x
 

	
 
IMAGE_NAME=${1:-symposion_app}
 

	
 
if [ -e ./symposion-tools ]; then
 
    pushd ./symposion-tools
 
    ./save_db_from_docker.sh
 
    popd
 
fi
 

	
 
# Check for docker running
 
if ! docker info >/dev/null 2>&1; then
 
    echo "Docker does not seem to be running. Please start it and retry."
 
    exit 1
 
fi
 

	
 
docker image build -f docker/Dockerfile -t ${IMAGE_NAME} --target symposion_dev .
 
docker container stop symposion
 
docker container rm symposion
 
docker container create --env-file docker/laptop-mode-env -p 28000:8000 -v $(pwd):/app/symposion_app --name symposion ${IMAGE_NAME}
 
docker container start symposion
 
## When we started the container and mounted . into /app/symposion_app, it hides the static/build directory
 
## As a kludge, re-run collectstatic to recreate it
 
## Possible alternative here: don't mount all of ., just mount the bits that we'd live to have update live
 
docker exec symposion ./manage.py collectstatic --noinput -v 0
 
docker exec symposion ./manage.py migrate
 
docker exec symposion ./manage.py loaddata ./fixtures/{conference,sites,sitetree,flatpages}.json
 
docker exec symposion ./manage.py create_review_permissions
 
docker exec symposion ./manage.py loaddata ./fixtures/????/*.json
 
docker exec symposion ./manage.py loaddata ./fixtures/sessions/*.json
 
docker exec symposion ./manage.py populate_inventory
 

	
 
if [ -e ./symposion-tools ]; then
 
    pushd ./symposion-tools
 
    ./fixture_to_docker.sh fixtures/dev_dummy_superuser.json
 
    ./fixture_to_docker.sh fixtures/????_*.json
 
    popd
 
else
 
    echo Now creating a Django superuser. Please enter a
 
    docker exec -it symposion ./manage.py createsuperuser --username admin1 --email root@example.com
 
fi
 

	
 
set +x
 
echo "Now you can log into http://localhost:28000/admin"
 
echo "Username: admin1      Password: the one you just typed twice"
 
echo "If you need to test as a non-admin user, create one at"
 
echo "http://localhost:28000/admin/auth/user/add/ - then log out"
 
echo "and log back in at http://localhost:28000"
pinaxcon/proposals/admin.py
Show inline comments
 
from django.contrib import admin
 

	
 
from pinaxcon.proposals import models
 
from symposion.proposals import models as symposion_models
 
from symposion.reviews.models import ProposalResult
 

	
 
class CategoryAdmin(admin.ModelAdmin):
 

	
 
    class AdditionalSpeakerInline(admin.TabularInline):
 
        model = symposion_models.AdditionalSpeaker
 

	
 
    class ProposalResultInline(admin.TabularInline):
 
        model = ProposalResult
 
        readonly_fields = ["score"]
 
        fields = ["status"]
 

	
 
    inlines = [
 
        AdditionalSpeakerInline,
 
        ProposalResultInline,
 
    ]
 

	
 

	
 
models_to_register = [
 
    models.TalkProposal,
 
    models.TutorialProposal,
 
    models.MiniconfProposal,
 
    ### LCA2022 Miniconfs
 
    models.GlamCommunityProposal,
 
    models.KernelProposal,
 
    models.OpenHardwareProposal,
 
    models.SysAdminProposal,
 
]
 

	
 
for model in models_to_register:
 
    admin.site.register(model, CategoryAdmin,
 
                        list_display = [
 
                            "id",
 
                            "title",
 
                            "speaker",
 
                            "speaker_email",
 
                            "kind",
 
                            "target_audience",
 
                            "status",
 
                            "cancelled",
 
                        ],
 
                        list_filter = [
 
                            "result__status",
 
                            "cancelled",
 
                        ],
 
    )
 

	
pinaxcon/proposals/forms.py
Show inline comments
 
import copy
 

	
 
from django import forms
 

	
 
from pinaxcon.proposals.fields import HelpTextField
 
from pinaxcon.proposals import models
 

	
 

	
 
DEFAULT_FIELDS =  [
 
    "title",
 
    "primary_topic",
 
    "target_audience",
 
    "experience_level",
 
    "abstract",
 
    "private_abstract",
 
    "content_warning",
 
    "technical_requirements",
 
    "project",
 
    "project_url",
 
    "video_url",
 
    "require_approval",
 
    "recording_release",
 
    "materials_release",
 
]
 

	
 
MINICONF_SESSION_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS)
 

	
 
class ProposalForm(forms.ModelForm):
 

	
 
    required_css_class = 'label-required'
 

	
 
    def clean_description(self):
 
        value = self.cleaned_data["description"]
 
        if len(value) > 400:
 
            raise forms.ValidationError(
 
                u"The description must be less than 400 characters"
 
            )
 
        return value
 

	
 

	
 
class TalkProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = models.TalkProposal
 
        fields = copy.copy(DEFAULT_FIELDS)
 

	
 

	
 
class TutorialProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = models.TutorialProposal
 
        fields = copy.copy(DEFAULT_FIELDS)
 

	
 

	
 
class MiniconfProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = models.MiniconfProposal
 
        fields = [
 
            "title",
 
            "abstract",
 
            "private_abstract",
 
            "technical_requirements",
 
            "recording_release",
 
            "materials_release",
 
        ]
 

	
 
### LCA2022 Miniconfs
 

	
 
class MiniconfSessionProposalForm(ProposalForm):
 
    pass
 

	
 

	
 
class GlamCommunityProposalForm(MiniconfSessionProposalForm):
 

	
 
    class Meta:
 
        model = models.GlamCommunityProposal
 
        fields = MINICONF_SESSION_FORMAT_FIELDS
 

	
 

	
 
class KernelProposalForm(MiniconfSessionProposalForm):
 

	
 
    class Meta:
 
        model = models.KernelProposal
 
        fields = MINICONF_SESSION_FORMAT_FIELDS
 

	
 

	
 
HARDWARE_FIELDS = copy.copy(MINICONF_SESSION_FORMAT_FIELDS)
 
HARDWARE_FIELDS.insert(4, "talk_format")
 

	
 
class OpenHardwareProposalForm(MiniconfSessionProposalForm):
 

	
 
    def __init__(self, *a, **k):
 
        super(OpenHardwareProposalForm, self).__init__(*a, **k)
 
        self.fields['talk_format'].required = True
 

	
 
    class Meta:
 
        model = models.OpenHardwareProposal
 
        fields = HARDWARE_FIELDS
 

	
 

	
 
class SysAdminProposalForm(MiniconfSessionProposalForm):
 

	
 
    class Meta:
 
        model = models.SysAdminProposal
 
        fields = MINICONF_SESSION_FORMAT_FIELDS
pinaxcon/proposals/migrations/0004_auto_20210809_2026.py
Show inline comments
 
deleted file
pinaxcon/proposals/migrations/0004_auto_20221208_0102.py
Show inline comments
 
new file 100644
 
# Generated by Django 2.2.28 on 2022-12-07 14:02
 

	
 
from django.db import migrations, models
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    dependencies = [
 
        ('symposion_schedule', '0008_auto_20190122_0815'),
 
        ('symposion_reviews', '0001_initial'),
 
        ('symposion_proposals', '0003_auto_20170702_2250'),
 
        ('proposals', '0003_auto_20170702_2227'),
 
    ]
 

	
 
    operations = [
 
        migrations.AddField(
 
            model_name='talkproposal',
 
            name='content_warning',
 
            field=models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning'),
 
        ),
 
        migrations.AddField(
 
            model_name='talkproposal',
 
            name='content_warning_html',
 
            field=models.TextField(blank=True),
 
        ),
 
        migrations.AddField(
 
            model_name='talkproposal',
 
            name='experience_level',
 
            field=models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?'),
 
        ),
 
        migrations.AddField(
 
            model_name='talkproposal',
 
            name='primary_topic',
 
            field=models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?'),
 
        ),
 
        migrations.AddField(
 
            model_name='talkproposal',
 
            name='require_approval',
 
            field=models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?'),
 
        ),
 
        migrations.AddField(
 
            model_name='tutorialproposal',
 
            name='content_warning',
 
            field=models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning'),
 
        ),
 
        migrations.AddField(
 
            model_name='tutorialproposal',
 
            name='content_warning_html',
 
            field=models.TextField(blank=True),
 
        ),
 
        migrations.AddField(
 
            model_name='tutorialproposal',
 
            name='experience_level',
 
            field=models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?'),
 
        ),
 
        migrations.AddField(
 
            model_name='tutorialproposal',
 
            name='primary_topic',
 
            field=models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?'),
 
        ),
 
        migrations.AddField(
 
            model_name='tutorialproposal',
 
            name='require_approval',
 
            field=models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?'),
 
        ),
 
        migrations.AlterField(
 
            model_name='talkproposal',
 
            name='recording_release',
 
            field=models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence."),
 
        ),
 
        migrations.AlterField(
 
            model_name='talkproposal',
 
            name='target_audience',
 
            field=models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?'),
 
        ),
 
        migrations.AlterField(
 
            model_name='tutorialproposal',
 
            name='recording_release',
 
            field=models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence."),
 
        ),
 
        migrations.AlterField(
 
            model_name='tutorialproposal',
 
            name='target_audience',
 
            field=models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?'),
 
        ),
 
        migrations.DeleteModel(
 
            name='MiniconfProposal',
 
        ),
 
    ]
pinaxcon/proposals/models.py
Show inline comments
 
from django.db import models
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from symposion.proposals.models import ProposalBase
 
from symposion.text_parser import parse
 

	
 

	
 
class Proposal(ProposalBase):
 

	
 
    TARGET_USER = 1
 
    TARGET_BUSINESS = 2
 
    TARGET_COMMUNITY = 3
 
    TARGET_DEVELOPER = 4
 

	
 
    TARGET_AUDIENCES = [
 
        (TARGET_DEVELOPER, "Developer"),
 
        (TARGET_COMMUNITY, "Community"),
 
        (TARGET_USER, "End User"),
 
        (TARGET_BUSINESS, "Business"),
 
    ]
 

	
 
    TOPIC_LINUX = 1
 
    TOPIC_SOFTWARE = 2
 
    TOPIC_HARDWARE = 3
 
    TOPIC_FIRMWARE = 4
 
    TOPIC_SYSADMIN = 5
 
    TOPIC_SECURITY = 6
 
    TOPIC_DOCUMENTATION = 7
 
    TOPIC_COMMUNITY = 8
 
    TOPIC_SCIENCE = 9
 
    TOPIC_GLAM = 10
 
    TOPIC_MULTIMEDIA = 11
 
    TOPIC_AEROSPACE = 12
 
    TOPIC_AGRICULTURE = 13
 
    TOPIC_OTHER = 14
 

	
 
    PROPOSAL_TOPIC = [
 
        (TOPIC_LINUX, "Linux"),
 
        (TOPIC_SOFTWARE, "Software"),
 
        (TOPIC_HARDWARE, "Hardware"),
 
        (TOPIC_FIRMWARE, "Firmware"),
 
        (TOPIC_SYSADMIN, "System Administration / Operations"),
 
        (TOPIC_SECURITY, "Security"),
 
        (TOPIC_DOCUMENTATION, "Documentation"),
 
        (TOPIC_COMMUNITY, "Community"),
 
        (TOPIC_SCIENCE, "Science & Data"),
 
        (TOPIC_GLAM, "Galleries, Libraries, Archives & Museums (GLAM)"),
 
        (TOPIC_MULTIMEDIA, "Multimedia"),
 
        (TOPIC_AEROSPACE, "Aerospace / UAV"),
 
        (TOPIC_AGRICULTURE, "Agriculture"),
 
        (TOPIC_OTHER, "Other"),
 
    ]
 

	
 
    LEVEL_BEGINNER = 1
 
    LEVEL_INTERMEDIATE = 2
 
    LEVEL_ADVANCED = 3
 

	
 
    EXPERIENCE_LEVEL = [
 
        (LEVEL_BEGINNER, "Beginner"),
 
        (LEVEL_INTERMEDIATE, "Intermediate"),
 
        (LEVEL_ADVANCED, "Advanced"),
 
    ]
 

	
 
    target_audience = models.IntegerField(
 
        choices=TARGET_AUDIENCES,
 
        help_text="Who is the target audience for your session?",
 
    )
 

	
 
    recording_release = models.BooleanField(
 
        default=True,
 
        help_text="I allow Linux Australia to release any recordings of "
 
        "presentations covered by this proposal, on YouTube under the "
 
        "standard YouTube licence, and on other platforms under the "
 
        "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International "
 
        "(<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> "
 
        "CC BY-NC-SA 4.0</a>) licence."
 
    )
 

	
 
    materials_release = models.BooleanField(
 
        default=True,
 
        help_text="I allow Linux Australia to release any other material "
 
        "(such as slides) from presentations covered by this proposal, under "
 
        "the <a "
 
        "href='https://creativecommons.org/licenses/by-sa/3.0/au/deed.en'> "
 
        "Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"
 
    )
 

	
 
    class Meta:
 
        abstract = True
 

	
 

	
 
class SessionProposal(Proposal):
 
    """
 
    Base Session Proposal
 

	
 
    This is not a meta class as we want a single table to store the common
 
    data across all session proposal types.
 
    """
 

	
 
    TOPIC_SOFTWARE = 1
 
    TOPIC_HARDWARE = 2
 
    TOPIC_FIRMWARE = 3
 
    TOPIC_KERNEL = 4
 
    TOPIC_DOCUMENTATION = 5
 
    TOPIC_COMMUNITY = 6
 
    TOPIC_SECURITY = 7
 
    TOPIC_OPERATIONS = 8
 
    TOPIC_OTHER = 9
 

	
 
    PROPOSAL_TOPIC = [
 
        (TOPIC_SOFTWARE, "Software"),
 
        (TOPIC_HARDWARE, "Hardware"),
 
        (TOPIC_FIRMWARE, "Firmware"),
 
        (TOPIC_KERNEL, "Linux Kernel"),
 
        (TOPIC_DOCUMENTATION, "Documentation"),
 
        (TOPIC_COMMUNITY, "Community"),
 
        (TOPIC_SECURITY, "Security"),
 
        (TOPIC_OPERATIONS, "Deployment & Operations"),
 
        (TOPIC_OTHER, "Other"),
 
    ]
 

	
 
    LEVEL_BEGINNER = 1
 
    LEVEL_INTERMEDIATE = 2
 
    LEVEL_ADVANCED = 3
 

	
 
    EXPERIENCE_LEVEL = [
 
        (LEVEL_BEGINNER, "Beginner"),
 
        (LEVEL_INTERMEDIATE, "Intermediate"),
 
        (LEVEL_ADVANCED, "Advanced"),
 
    ]
 

	
 
    primary_topic = models.IntegerField(
 
        choices=PROPOSAL_TOPIC,
 
        help_text="What is the primary topic area for your session?"
 
    )
 

	
 
    experience_level = models.IntegerField(
 
        choices=EXPERIENCE_LEVEL,
 
        help_text="What level of experience will your session be pitched at?"
 
    )
 

	
 
    require_approval = models.BooleanField(
 
        default=False,
 
        help_text="Do you require further approval from your employer or "
 
        "institution before you can confirm your availability to present?"
 
    )
 

	
 

	
 
class TalkProposal(SessionProposal):
 

	
 
    class Meta:
 
        verbose_name = "talk proposal"
 

	
 

	
 
class TutorialProposal(SessionProposal):
 

	
 
    class Meta:
 
        verbose_name = "tutorial proposal"
 

	
 

	
 
class MiniconfProposal(Proposal):
 
    """
 
    Miniconf Proposal
 

	
 
    Note that this is just a Proposal, not a SessionProposal, as it does not
 
    require a number of fields that the others use.
 
    """
 

	
 
    target_audience = models.IntegerField(choices=Proposal.TARGET_AUDIENCES,
 
                                          default=Proposal.TARGET_DEVELOPER)
 

	
 
    class Meta:
 
        verbose_name = "miniconf proposal"
 

	
 

	
 
class MiniconfSessionProposal(SessionProposal):
 
    """
 
    Base Miniconf Session Proposal
 
    """
 
    content_warning = models.TextField(
 
        "Content Warning",
 
        help_text=_("This will be shown on the schedule to give attendees "
 
                    "advanced warning of topics covered in the session. "),
 
        blank=True,
 
    )
 
    content_warning_html = models.TextField(blank=True)
 

	
 
    class Meta:
 
        abstract = True
 

	
 
    def save(self, *args, **kwargs):
 
        self.content_warning_html = parse(self.content_warning)
 
        return super(Proposal, self).save(*args, **kwargs)
 

	
 
class GlamCommunityProposal(MiniconfSessionProposal):
 

	
 
    class Meta:
 
        verbose_name = "GO GLAM Miniconf Proposal"
 

	
 

	
 
class KernelProposal(MiniconfSessionProposal):
 

	
 
    class Meta:
 
        verbose_name = "Kernel Miniconf Proposal"
 

	
 

	
 
class OpenHardwareProposal(MiniconfSessionProposal):
 

	
 
    FORMAT_PRESENTATION = 1
 
    FORMAT_TUTORIAL = 2
 
    FORMAT_HANDS_ON = 3
 

	
 
    TALK_FORMATS = [
 
        (FORMAT_PRESENTATION, "Presentation"),
 
        (FORMAT_TUTORIAL, "Tutorial"),
 
        (FORMAT_HANDS_ON, "Hands-on"),
 
    ]
 

	
 
    talk_format = models.IntegerField(
 
        choices=TALK_FORMATS,
 
        default=FORMAT_PRESENTATION,
 
        help_text="Will your session be a presentation, tutorial or hands-on "
 
        "(e.g how to use KiCAD or some other tooling)?"
 
    )
 
class TalkProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "Open Hardware Miniconf Proposal"
 
        verbose_name = "talk proposal"
 

	
 

	
 
class SysAdminProposal(MiniconfSessionProposal):
 
class TutorialProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "System Administration Miniconf Proposal"
 
        verbose_name = "tutorial proposal"
pinaxcon/registrasion/forms.py
Show inline comments
 
from pinaxcon.registrasion import models
 

	
 
from django import forms
 

	
 

	
 
class YesNoField(forms.TypedChoiceField):
 

	
 
    def __init__(self, *args, **kwargs):
 
        kwargs['required'] = True
 
        super(YesNoField, self).__init__(
 
            *args,
 
            coerce=lambda x: x in ['True', 'Yes', True],
 
            choices=((None, '--------'), (False, 'No'), (True, 'Yes')),
 
            **kwargs
 
        )
 

	
 

	
 
class ProfileForm(forms.ModelForm):
 
    ''' A form for requesting badge and profile information. '''
 

	
 
    required_css_class = 'label-required'
 

	
 
    class Meta:
 
        model = models.AttendeeProfile
 
        exclude = [
 
            'attendee',
 
            'children',
 
            'lca_announce',
 
            'lca_chat',
 
            'future_conference',
 
        ]
 
        widgets = {
 
            'past_lca': forms.widgets.CheckboxSelectMultiple
 
        }
 
        field_classes = {
 
            "of_legal_age": YesNoField,
 
        }
pinaxcon/registrasion/management/commands/populate_inventory.py
Show inline comments
 
from collections import namedtuple
 
from datetime import timedelta
 
from decimal import Decimal
 
from django.conf import settings
 
from django.contrib.auth.models import Group
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.core.management.base import BaseCommand
 

	
 
from registrasion.models import inventory as inv
 
from registrasion.models import conditions as cond
 
from symposion import proposals
 

	
 

	
 
class Command(BaseCommand):
 
    help = 'Populates the tickets and product inventory models'
 
    count = 0
 

	
 
    def add_arguments(self, parser):
 
        pass
 

	
 
    def handle(self, *args, **options):
 

	
 
        kinds = []
 
        for i in settings.MAIN_CONFERENCE_PROPOSAL_KINDS:
 
            kinds.append(proposals.models.ProposalKind.objects.get(name=i))
 
        self.main_conference_proposals = kinds
 

	
 
        self.populate_groups()
 
        self.populate_inventory()
 
        self.populate_restrictions()
 
        self.populate_discounts()
 

	
 
    def populate_groups(self):
 
        self.group_team = self.find_or_make(
 
            Group,
 
            ("name", ),
 
            name="Conference organisers",
 
        )
 
        self.group_volunteers = self.find_or_make(
 
            Group,
 
            ("name", ),
 
            name="Conference volunteers",
 
        )
 
        self.group_unpublish = self.find_or_make(
 
            Group,
 
            ("name", ),
 
            name="Can see unpublished products",
 
        )
 
        self.group_prepurchase = self.find_or_make(
 
            Group,
 
            ("name", ),
 
            name="Pre-purchase",
 
        )
 

	
 
    def populate_inventory(self):
 
        # Categories
 

	
 
        self.ticket = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Ticket",
 
            description="Each type of ticket has different included products. "
 
                        "For details of what products are included, see our "
 
                        "<a href=\"/attend/tickets/\">registration page</a>.",
 
            required=True,
 
            render_type=inv.Category.RENDER_TYPE_RADIO,
 
            limit_per_user=1,
 
            order=1,
 
        )
 
        self.terms = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Terms, Conditions, and Code of Conduct Acceptance",
 
            description="I agree to the "
 
                        "<a href=\"/attend/terms-and-conditions/\"> "
 
                        "terms and conditions of attendance</a>, and I have read, "
 
                        "understood, and agree to act according to the standards set "
 
                        "forth in our <a href=\"/attend/code-of-conduct/\">"
 
                        "Code of Conduct</a>.",
 
            required=True,
 
            render_type=inv.Category.RENDER_TYPE_CHECKBOX,
 
            order=10,
 
        )
 
        # self.penguin_dinner = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Penguin Dinner Ticket",
 
        #     description="Tickets to our conference dinner on the evening of "
 
        #                 f"{settings.PENGUIN_DINNER_TICKET_DATE: %A %d %B}. "
 
        #                 "All attendees may purchase "
 
        #                 "seats at the dinner, even if a dinner ticket is not "
 
        #                 "included in your conference ticket price.",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_QUANTITY,
 
        #     limit_per_user=10,
 
        #     order=20,
 
        # )
 
        # self.speakers_dinner_ticket = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Speakers' Dinner Ticket",
 
        #     description="Tickets to our exclusive Speakers' Dinner on the "
 
        #                 "evening of "
 
        #                 f"{settings.SPEAKER_DINNER_TICKET_DATE: %A %d %B}.",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_QUANTITY,
 
        #     limit_per_user=1,
 
        #     order=30,
 
        # )
 
        # self.pdns_category = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Professional Delegates Networking Session Ticket",
 
        #     description="Tickets to our Professional Delegates Networking session. "
 
        #                 "This event will be held on the evening of "
 
        #                 f"{settings.PDNS_TICKET_DATE: %A %d %B} "
 
        #                 "and is restricted to Professional Ticket "
 
        #                 "holders, speakers, miniconf organisers, and invited "
 
        #                 "guests.",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_RADIO,
 
        #     limit_per_user=1,
 
        #     order=40,
 
        # )
 
        # self.t_shirt = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Shirt",
 
        #     description="Commemorative conference shirts, featuring the "
 
        #                 f"linux.conf.au {settings.LCA_START.year} artwork. "
 
        #                 f"linux.conf.au {settings.CONF_START.year} artwork. "
 
        #                 "View the <a href=\"/attend/shirts/\">"
 
        #                 "sizing guide</a>.",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_ITEM_QUANTITY,
 
        #     order=50,
 
        # )
 
        # self.accommodation = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Accommodation at University of Tasmania",
 
        #     description="Accommodation at the University of Tasmania colleges "
 
        #                 "and apartments. You can come back and book your "
 
        #                 "accommodation at a later date, provided rooms remain "
 
        #                 "available. Rooms may only be booked from Sunday 15 "
 
        #                 "January--Saturday 21 January. If you wish to stay "
 
        #                 "for only a part of the 6-day period, you must book "
 
        #                 "accommodation for the full 6-day period. Rooms at "
 
        #                 "other hotels, including Wrest Point can be booked "
 
        #                 "elsewhere. For full details, see [LINK]our "
 
        #                 "accommodation page.[/LINK]",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_RADIO,
 
        #     limit_per_user=1,
 
        #     order=50,
 
        # )
 
        self.badge_category = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Swag Badge",
 
            description="We have a limited number of "
 
                        "<a href=\"/attend/shirts/\">Swag Badges</a> available "
 
                        f"for attendees of {settings.CONFERENCE_NAME}. "
 
                        "They will be allocated on a first come, first serve basis. "
 
                        "Please note that they are only available to Australian "
 
                        "attendees due to shipping limitations.",
 
            required=False,
 
            render_type=inv.Category.RENDER_TYPE_CHECKBOX,
 
            order=50,
 
        )
 
        self.extras = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Extras",
 
            description="Other items that can improve your conference "
 
                        "experience.",
 
            required=False,
 
            render_type=inv.Category.RENDER_TYPE_QUANTITY,
 
            order=60,
 
        )
 

	
 
        # Tickets
 

	
 
        self.ticket_contributor = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.CONTRIBUTOR.name,
 
            price=settings.CONTRIBUTOR.regular_price,
 
            reservation_duration=hours(24),
 
            order=1,
 
        )
 
        self.ticket_professional = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.PROFESSIONAL.name,
 
            price=settings.PROFESSIONAL.regular_price,
 
            reservation_duration=hours(24),
 
            order=10,
 
        )
 
        self.ticket_hobbyist = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.HOBBYIST.name,
 
            price=settings.HOBBYIST.regular_price,
 
            reservation_duration=hours(24),
 
            order=20,
 
        )
 
        self.ticket_student = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.STUDENT.name,
 
            price=settings.STUDENT.regular_price,
 
            reservation_duration=hours(24),
 
            order=30,
 
        )
 
        self.ticket_miniconf_only = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.MINICONF_ONLY.name,
 
            price=settings.MINICONF_ONLY.regular_price,
 
            reservation_duration=hours(24),
 
            order=40,
 
        )
 
        self.ticket_speaker = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.SPEAKER.name,
 
            price=settings.SPEAKER.regular_price,
 
            reservation_duration=hours(24),
 
            order=50,
 
        )
 
        self.ticket_media = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.MEDIA.name,
 
            price=settings.MEDIA.regular_price,
 
            reservation_duration=hours(24),
 
            order=60,
 
        )
 
        self.ticket_sponsor = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.SPONSOR.name,
 
            price=settings.SPONSOR.regular_price,
 
            reservation_duration=hours(24),
 
            order=70,
 
        )
 
        self.ticket_team = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.CONFERENCE_ORG.name,
 
            price=settings.CONFERENCE_ORG.regular_price,
 
            reservation_duration=hours(24),
 
            order=80,
 
        )
 
        self.ticket_volunteer = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.ticket,
 
            name=settings.CONFERENCE_VOL.name,
 
            price=settings.CONFERENCE_VOL.regular_price,
 
            reservation_duration=hours(24),
 
            order=90,
 
        )
 

	
 
        # Agreements
 
        self.accept_terms = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.terms,
 
            name="I Accept",
 
            price=Decimal("00.00"),
 
            reservation_duration=hours(24),
 
            order=10,
 
            limit_per_user=1,
 
        )
 

	
 
        # for t in settings.PENGUIN_DINNER.tickets:
 
        #     self.find_or_make(
 
        #         inv.Product,
 
        #         ("name", "category",),
 
        #         category=self.penguin_dinner,
 
        #         name=t.name,
 
        #         description=t.description,
 
        #         price=t.price,
 
        #         reservation_duration=t.reservation,
 
        #         order=t.order()
 
        #     )
 

	
 
        # for t in settings.SPEAKERS_DINNER.tickets:
 
        #     self.find_or_make(
 
        #         inv.Product,
 
        #         ("name", "category",),
 
        #         category=self.speakers_dinner_ticket,
 
        #         name=t.name,
 
        #         description=t.description,
 
        #         price=t.price,
 
        #         reservation_duration=t.reservation,
 
        #         order=t.order()
 
        #     )
 

	
 
        # PDNS
 

	
 
        # self.pdns = self.find_or_make(
 
        #     inv.Product,
 
        #     ("name", "category",),
 
        #     category=self.pdns_category,
 
        #     name="Conference Attendee",
 
        #     price=Decimal("00.00"),
 
        #     reservation_duration=hours(1),
 
        #     limit_per_user=1,
 
        #     order=10,
 
        # )
 

	
 
        # # Accommodation
 

	
 
        # self.accommodation_week = self.find_or_make(
 
        #     inv.Product,
 
        #     ("name", "category",),
 
        #     category=self.accommodation,
 
        #     name="Single Bedroom with Shared Bathrooms, includes full "
 
        #          "breakfast, Sunday 15 January 2017--Saturday 21 January 2017",
 
        #     price=Decimal("396.00"),
 
        #     reservation_duration=hours(24),
 
        #     limit_per_user=1,
 
        #     order=10,
 
        # )
 

	
 
        # Extras
 

	
 
        self.swag_badge = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.badge_category,
 
            name="I would like a Swag Badge (if available)",
 
            price=Decimal("0.00"),
 
            reservation_duration=hours(24),
 
            limit_per_user=1,
 
            order=10,
 
        )
 

	
 
        self.carbon_offset = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.extras,
 
            name="Offset the carbon pollution generated by your attendance, "
 
                 "thanks to fifteen trees.",
 
            price=Decimal("5.00"),
 
            reservation_duration=hours(24),
 
            order=10,
 
        )
 

	
 

	
 
        # Shirts
 
        # ShirtGroup = namedtuple("ShirtGroup", ("prefix", "sizes"))
 
        # shirt_names = {
 
        #     "straight": ShirtGroup(
 
        #         "Straight Cut",
 
        #         ("S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL"),
 
        #     ),
 
        #     "semi_fitted": ShirtGroup(
 
        #         "Semi-Fitted",
 
        #         ("XS", "S", "M", "L", "XL", "2XL"),
 
        #     ),
 
        #     "fitted": ShirtGroup(
 
        #         "Fitted",
 
        #         ("XS", "S", "M", "L", "XL", "2XL"),
 
        #     ),
 
        # }
 

	
 
        # self.shirts = {}
 
        # order = 0
 
        # for name, group in shirt_names.items():
 
        #     self.shirts[name] = {}
 
        #     prefix = group.prefix
 
        #     for size in group.sizes:
 
        #         product_name = "%s %s" % (prefix, size)
 
        #         order += 10
 
        #         self.shirts[name][size] = self.find_or_make(
 
        #             inv.Product,
 
        #             ("name", "category",),
 
        #             name=product_name,
 
        #             category=self.t_shirt,
 
        #             price=settings.TSHIRT_PRICE,
 
        #             reservation_duration=hours(1),
 
        #             order=order,
 
        #         )
 

	
 
    def populate_restrictions(self):
 

	
 
        # Hide the products that will eventually need a voucher
 
        hide_voucher_products = self.find_or_make(
 
            cond.GroupMemberFlag,
 
            ("description", ),
 
            description="Can see hidden products",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        )
 
        hide_voucher_products.group.set([self.group_unpublish])
 
        hide_voucher_products.products.set([
 
            self.ticket_media,
 
            self.ticket_sponsor,
 
        ])
 

	
 
        hide_all_tickets = self.find_or_make(
 
            cond.GroupMemberFlag,
 
            ("description", ),
 
            description="Can pre-purchase tickets",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        )
 
        hide_all_tickets.group.set([self.group_prepurchase])
 
        hide_all_tickets.products.set([
 
            self.ticket_contributor,
 
            self.ticket_professional,
 
            self.ticket_hobbyist,
 
            self.ticket_student,
 
            self.ticket_miniconf_only,
 
        ])
 

	
 
        # Set limits.
 
        public_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Public ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=600,
 
        )
 
        public_ticket_cap.products.set([
 
            self.ticket_contributor,
 
            self.ticket_professional,
 
            self.ticket_hobbyist,
 
            self.ticket_student,
 
        ])
 

	
 
        student_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Student ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=100,
 
        )
 

	
 
        student_ticket_cap.products.set([
 
            self.ticket_student,
 
        ])
 

	
 
        public_ticket_cap.products.set([
 
            self.ticket_contributor,
 
            self.ticket_professional,
 
            self.ticket_hobbyist,
 
            self.ticket_student,
 
        ])
 

	
 
        sponsor_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for sponsors",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=70,
 
        )
 
        sponsor_ticket_cap.products.set([
 
            self.ticket_sponsor,
 
        ])
 

	
 
        volunteer_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for volunteers and organisers",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=62,
 
        )
 
        volunteer_ticket_cap.products.set([
 
            self.ticket_team,
 
            self.ticket_volunteer,
 
        ])
 

	
 
        media_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for media",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=10,
 
        )
 
        media_ticket_cap.products.set([
 
            self.ticket_media,
 
        ])
 

	
 
        speaker_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for speakers (and miniconf organisers)",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=104,
 
        )
 
        speaker_ticket_cap.products.set([
 
            self.ticket_speaker,
 
        ])
 

	
 
        # penguin_dinner_cap = self.find_or_make(
 
        #     cond.TimeOrStockLimitFlag,
 
        #     ("description", ),
 
        #     description="Penguin dinner ticket cap",
 
        #     condition=cond.FlagBase.DISABLE_IF_FALSE,
 
        #     limit=900,
 
        # )
 
        # penguin_dinner_cap.categories.set([
 
        #     self.penguin_dinner,
 
        # ])
 

	
 
        # speakers_dinner_cap = self.find_or_make(
 
        #     cond.TimeOrStockLimitFlag,
 
        #     ("description", ),
 
        #     description="Speakers dinner ticket cap",
 
        #     condition=cond.FlagBase.DISABLE_IF_FALSE,
 
        #     limit=135,
 
        # )
 
        # speakers_dinner_cap.categories.set([
 
        #     self.speakers_dinner_ticket,
 
        # ])
 

	
 
        # pdns_cap = self.find_or_make(
 
        #     cond.TimeOrStockLimitFlag,
 
        #     ("description", ),
 
        #     description="PDNS ticket cap",
 
        #     condition=cond.FlagBase.DISABLE_IF_FALSE,
 
        #     limit=400,
 
        # )
 
        # pdns_cap.categories.set([
 
        #     self.pdns_category,
 
        # ])
 

	
 
        # Volunteer tickets are for volunteers only
 
        volunteers = self.find_or_make(
 
            cond.GroupMemberFlag,
 
            ("description", ),
 
            description="Volunteer tickets",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        )
 
        volunteers.group.set([self.group_volunteers])
 
        volunteers.products.set([
 
            self.ticket_volunteer,
 
        ])
 

	
 
        # Team tickets are for team members only
 
        team = self.find_or_make(
 
            cond.GroupMemberFlag,
 
            ("description", ),
 
            description="Team tickets",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        )
 
        team.group.set([self.group_team])
 
        team.products.set([
 
            self.ticket_team,
 
        ])
 

	
 
        # Speaker tickets are for primary speakers only
 
        speaker_tickets = self.find_or_make(
 
            cond.SpeakerFlag,
 
            ("description", ),
 
            description="Speaker tickets",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
            is_presenter=True,
 
            is_copresenter=False,
 
        )
 
        speaker_tickets.proposal_kind.set(self.main_conference_proposals)
 
        speaker_tickets.products.set([self.ticket_speaker, ])
 

	
 
        # Speaker dinner tickets are for primary speakers only
 
        # speaker_dinner_tickets = self.find_or_make(
 
        #     cond.SpeakerFlag,
 
        #     ("description", ),
 
        #     description="Speaker dinner tickets",
 
        #     condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        #     is_presenter=True,
 
        #     is_copresenter=False,
 
        # )
 
        # speaker_dinner_tickets.proposal_kind.set(self.main_conference_proposals)
 
        # speaker_dinner_tickets.categories.set([self.speakers_dinner_ticket, ])
 

	
 
        # PDNS tickets are complicated.
 
        # They can be enabled by tickets
 
        # pdns_by_ticket = self.find_or_make(
 
        #     cond.ProductFlag,
 
        #     ("description", ),
 
        #     description="PDNS available by ticket",
 
        #     condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        # )
 
        # pdns_by_ticket.enabling_products.set([
 
        #     self.ticket_professional,
 
        #     self.ticket_contributor,
 
        #     self.ticket_media,
 
        #     self.ticket_sponsor,
 
        # ])
 
        # pdns_by_ticket.categories.set([self.pdns_category, ])
 

	
 
        # They are available to speakers
 
        # pdns_by_speaker = self.find_or_make(
 
        #     cond.SpeakerFlag,
 
        #     ("description", ),
 
        #     description="PDNS available to speakers",
 
        #     condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        #     is_presenter=True,
 
        #     is_copresenter=True,
 

	
 
        # )
 
        # pdns_by_speaker.proposal_kind.set(self.main_conference_proposals)
 
        # pdns_by_speaker.categories.set([self.pdns_category, ])
 

	
 
        # They are available to staff
 
        # pdns_by_staff = self.find_or_make(
 
        #     cond.GroupMemberFlag,
 
        #     ("description", ),
 
        #     description="PDNS available to staff",
 
        #     condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        # )
 
        # pdns_by_staff.group.set([
 
        #     self.group_team,
 
        # ])
 
        # pdns_by_staff.categories.set([self.pdns_category, ])
 

	
 
        # Don't allow people to get anything if they don't have a ticket first
 
        needs_a_ticket = self.find_or_make(
 
            cond.CategoryFlag,
 
            ("description", ),
 
            description="GottaGettaTicketFirst",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            enabling_category=self.ticket
 
        )
 
        needs_a_ticket.categories.set([
 
            self.extras,
 
            # self.t_shirt,
 
            # self.penguin_dinner,
 
            # self.pdns_category,
 
        ])
 
        # Require attendees to accept the T&Cs and Code of Conduct
 
        needs_agreement = self.find_or_make(
 
            cond.CategoryFlag,
 
            ("description", ),
 
            description="Must Accept Terms",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            enabling_category=self.terms,
 
        )
 
        needs_agreement.categories.set([
 
            self.extras,
 
            # self.t_shirt,
 
            # self.penguin_dinner,
 
            # self.pdns_category,
 
            # self.speakers_dinner_ticket,
 
        ])
 

	
 
    def populate_discounts(self):
 
        def add_early_birds(discount):
 
            self.find_or_make(
 
                cond.DiscountForProduct,
 
                ("discount", "product"),
 
                discount=discount,
 
                product=self.ticket_contributor,
 
                price=settings.CONTRIBUTOR.earlybird_discount(),
 
                quantity=1,  # Per user
 
            )
 
            self.find_or_make(
 
                cond.DiscountForProduct,
 
                ("discount", "product"),
 
                discount=discount,
 
                product=self.ticket_professional,
 
                price=settings.PROFESSIONAL.earlybird_discount(),
 
                quantity=1,  # Per user
 
            )
 

	
 
        def free_category(parent_discount, category, quantity=1):
 
            self.find_or_make(
 
                cond.DiscountForCategory,
 
                ("discount", "category",),
 
                discount=parent_discount,
 
                category=category,
 
                percentage=Decimal("100.00"),
 
                quantity=quantity,
 
            )
 

	
 
        # Early Bird Discount (general public)
 
        # early_bird_hobbyist_discount = self.find_or_make(
 
        #     cond.TimeOrStockLimitDiscount,
 
        #     ("description", ),
 
        #     description="Early Bird Discount - Hobbyist",
 
        #     end_time=settings.EARLY_BIRD_DEADLINE,
 
        #     limit=150,  # Across all users
 
        # )
 
        # self.find_or_make(
 
        #         cond.DiscountForProduct,
 
        #         ("discount", "product"),
 
        #         discount=early_bird_hobbyist_discount,
 
        #         product=self.ticket_hobbyist,
 
        #         price=settings.HOBBYIST.earlybird_discount(),
 
        #         quantity=1,  # Per user
 
        # )
 

	
 
        # early_bird = self.find_or_make(
 
        #     cond.TimeOrStockLimitDiscount,
 
        #     ("description", ),
 
        #     description="Early Bird Discount - Professional",
 
        #     end_time=settings.EARLY_BIRD_DEADLINE,
 
        #     limit=200,  # Across professionals and fairy sponsors
 
        # )
 
        # add_early_birds(early_bird)
 

	
 
        # Early bird rates for speakers
 
        speaker_ticket_discounts = self.find_or_make(
 
            cond.SpeakerDiscount,
 
            ("description", ),
 
            description="Speaker Ticket Discount",
 
            is_presenter=True,
 
            is_copresenter=True,
 
        )
 
        speaker_ticket_discounts.proposal_kind.set(
 
            self.main_conference_proposals,
 
        )
 
        add_early_birds(speaker_ticket_discounts)
 

	
 
        # Primary speaker gets a free speaker dinner ticket
 
        primary_speaker = self.find_or_make(
 
            cond.SpeakerDiscount,
 
            ("description", ),
 
            description="Complimentary for primary proposer",
 
            is_presenter=True,
 
            is_copresenter=False,
 
        )
 
        primary_speaker.proposal_kind.set(self.main_conference_proposals)
 
        # free_category(primary_speaker, self.speakers_dinner_ticket)
 

	
 
        # Professional-Like ticket inclusions
 
        ticket_prolike_inclusions = self.find_or_make(
 
            cond.IncludedProductDiscount,
 
            ("description", ),
 
            description="Complimentary for ticket holder (Professional-level)",
 
        )
 
        ticket_prolike_inclusions.enabling_products.set([
 
            self.ticket_contributor,
 
            self.ticket_professional,
 
            self.ticket_media,
 
            self.ticket_sponsor,
 
            self.ticket_speaker,
 
        ])
 
        # free_category(ticket_prolike_inclusions, self.penguin_dinner)
 
        # free_category(ticket_prolike_inclusions, self.t_shirt)
 

	
 
        # Hobbyist ticket inclusions
 
        ticket_hobbyist_inclusions = self.find_or_make(
 
            cond.IncludedProductDiscount,
 
            ("description", ),
 
            description="Complimentary for ticket holder (Hobbyist-level)",
 
        )
 
        ticket_hobbyist_inclusions.enabling_products.set([
 
            self.ticket_hobbyist,
 
        ])
 
        # free_category(ticket_hobbyist_inclusions, self.t_shirt)
 

	
 
        # Student ticket inclusions
 
        ticket_student_inclusions = self.find_or_make(
 
            cond.IncludedProductDiscount,
 
            ("description", ),
 
            description="Complimentary for ticket holder (Student-level)",
 
        )
 
        ticket_student_inclusions.enabling_products.set([
 
            self.ticket_student,
 
        ])
 
        # free_category(ticket_student_inclusions, self.t_shirt)
 

	
 
        # Team ticket inclusions
 
        ticket_staff_inclusions = self.find_or_make(
 
            cond.IncludedProductDiscount,
 
            ("description", ),
 
            description="Complimentary for ticket holder (Staff)",
 
        )
 
        ticket_staff_inclusions.enabling_products.set([
 
            self.ticket_team,
 
        ])
 
        # free_category(ticket_staff_inclusions, self.penguin_dinner)
 

	
 
        # Team & volunteer shirts, regardless of ticket type
 
        # staff_t_shirts = self.find_or_make(
 
        #     cond.GroupMemberDiscount,
 
        #     ("description", ),
 
        #     description="Shirts complimentary for staff and volunteers",
 
        # )
 
        # staff_t_shirts.group.set([
 
        #     self.group_team,
 
        #     self.group_volunteers,
 
        # ])
 
        # free_category(staff_t_shirts, self.t_shirt, quantity=5)
 

	
 
        print(f"{self.count} categories found/made")
 

	
 
    def find_or_make(self, model, search_keys, **k):
 
        ''' Either makes or finds an object of type _model_, with the given
 
        kwargs.
 

	
 
        Arguments:
 
            search_keys ([str, ...]): A sequence of keys that are used to search
 
            for an existing version in the database. The remaining arguments are
 
            only used when creating a new object.
 
        '''
 
        self.count += 1
 
        try:
 
            keys = dict((key, k[key]) for key in search_keys)
 
            a = model.objects.get(**keys)
 
            self.stdout.write("FOUND  : " + str(keys))
 
            model.objects.filter(id=a.id).update(**k)
 
            a.refresh_from_db()
 
            return a
 
        except ObjectDoesNotExist:
 
            a = model.objects.create(**k)
 
            self.stdout.write("CREATED: " + str(k))
 
            return a
 

	
 

	
 
def hours(n):
 
    return timedelta(hours=n)
pinaxcon/registrasion/migrations/0001_initial.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
# Generated by Django 1.9.7 on 2016-09-22 06:25
 
from __future__ import unicode_literals
 

	
 
from django.db import migrations, models
 
import django.db.models.deletion
 
import django_countries.fields
 

	
 

	
 
_PAST_EVENTS = (
 
    (1999, "1999 Melbourne (CALU)"),
 
    (2001, "2001 Sydney"),
 
    (2002, "2002 Brisbane"),
 
    (2003, "2003 Perth"),
 
    (2004, "2004 Adelaide"),
 
    (2005, "2005 Canberra"),
 
    (2006, "2006 Dunedin"),
 
    (2007, "2007 Sydney"),
 
    (2008, "2008 Melbourne"),
 
    (2009, "2009 Hobart"),
 
    (2010, "2010 Wellington"),
 
    (2011, "2011 Brisbane"),
 
    (2012, "2012 Ballarat"),
 
    (2013, "2013 Canberra"),
 
    (2014, "2014 Perth"),
 
    (2015, "2015 Auckland"),
 
    (2016, "2016 Geelong"),
 
    (2017, "2017 Hobart"),
 
    (2018, "2018 Sydney"),
 
    (2019, "2019 Christchurch"),
 
    (2020, "2020 Gold Coast"),
 
    (2021, "2021 Online"),
 
    (1999, "CALU 1999 Melbourne"),
 
    (2001, "LCA2001 Sydney"),
 
    (2002, "LCA2002 Brisbane"),
 
    (2003, "LCA2003 Perth"),
 
    (2004, "LCA2004 Adelaide"),
 
    (2005, "LCA2005 Canberra"),
 
    (2006, "LCA2006 Dunedin"),
 
    (2007, "LCA2007 Sydney"),
 
    (2008, "LCA2008 Melbourne"),
 
    (2009, "LCA2009 Hobart"),
 
    (2010, "LCA2010 Wellington"),
 
    (2011, "LCA2011 Brisbane"),
 
    (2012, "LCA2012 Ballarat"),
 
    (2013, "LCA2013 Canberra"),
 
    (2014, "LCA2014 Perth"),
 
    (2015, "LCA2015 Auckland"),
 
    (2016, "LCA2016 Geelong"),
 
    (2017, "LCA2017 Hobart"),
 
    (2018, "LCA2018 Sydney"),
 
    (2019, "LCA2019 Christchurch"),
 
    (2020, "LCA2020 Gold Coast"),
 
    (2021, "LCA2021 Online"),
 
    (2022, "LCA2022 Online"),
 
)
 

	
 

	
 
def populate(apps, schema_editor):
 
    PastEvent = apps.get_model("pinaxcon_registrasion","PastEvent")
 

	
 
    all_such = PastEvent.objects.all()
 
    by_year = dict((event.year, event) for event in all_such)
 

	
 
    events = []
 
    for past_event in _PAST_EVENTS:
 
        if past_event[0] in by_year:
 
            continue
 
        events.append(PastEvent(
 
            year=past_event[0],
 
            name=past_event[1],
 
        ))
 

	
 
    PastEvent.objects.bulk_create(events)
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    initial = True
 

	
 
    dependencies = [
 
        ('registrasion', '0005_auto_20160905_0945'),
 
    ]
 

	
 
    operations = [
 
        migrations.CreateModel(
 
            name='AttendeeProfile',
 
            fields=[
 
                ('attendeeprofilebase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='registrasion.AttendeeProfileBase')),
 
                ('name', models.CharField(help_text=b"Your name, as you'd like it to appear on your badge. ", max_length=64, verbose_name=b'Your name (for your conference nametag)')),
 
                ('company', models.CharField(blank=True, help_text=b"The name of your company, as you'd like it on your badge", max_length=64)),
 
                ('state', models.CharField(choices=[(b'', b'Not in Australia'), (b'TAS', b'Tasmania'), (b'ACT', b'Australian Capital Territory'), (b'NSW', b'New South Wales'), (b'NT', b'Northern Territory'), (b'QLD', b'Queensland'), (b'SA', b'South Australia'), (b'VIC', b'Victoria'), (b'WA', b'Western Australia')], max_length=4, verbose_name=b'Australian State/Territory')),
 
                ('country', django_countries.fields.CountryField(max_length=2)),
 
                ('free_text_1', models.CharField(blank=True, help_text=b"A line of free text that will appear on your badge. Use this for your Twitter handle, IRC nick, your preferred pronouns or anything else you'd like people to see on your badge.", max_length=64, verbose_name=b'Free text line 1')),
 
                ('free_text_2', models.CharField(blank=True, max_length=64, verbose_name=b'Free text line 2')),
 
                ('name_per_invoice', models.CharField(blank=True, help_text=b"If your legal name is different to the name on your badge, fill this in, and we'll put it on your invoice. Otherwise, leave it blank.", max_length=256, verbose_name=b'Your legal name (for invoicing purposes)')),
 
                ('address', models.TextField(blank=True, help_text=b'This address, if provided, will appear on your invoices.', verbose_name=b'Invoicing address')),
 
                ('of_legal_age', models.BooleanField(help_text=b'Being under 18 will not stop you from attending the conference. We need to know whether you are over 18 to allow us to cater for you at venues that serve alcohol.', verbose_name=b'Are you over 18?')),
 
                ('dietary_restrictions', models.TextField(blank=True, max_length=256, verbose_name=b'Food allergies, intolerances, or dietary restrictions')),
 
                ('accessibility_requirements', models.TextField(blank=True, verbose_name=b'Accessibility-related requirements')),
 
                ('gender', models.CharField(blank=True, help_text=b'Gender data will only be used for demographic purposes.', max_length=64)),
 
                ('linux_australia', models.BooleanField(help_text=b"Select this field to register for free <a href='http://www.linux.org.au/'>Linux Australia</a> membership.", verbose_name=b'Linux Australia membership')),
 
                ('lca_announce', models.BooleanField(help_text=b'Select to be subscribed to the low-traffic lca-announce mailing list', verbose_name=b'Subscribe to lca-announce list')),
 
                ('lca_chat', models.BooleanField(help_text=b'lca2017-chat is a high-traffic mailing list used by attendees during the week of the conference for general discussion.', verbose_name=b'Subscribe to the lca2017-chat list')),
 
            ],
 
            bases=('registrasion.attendeeprofilebase',),
 
        ),
 
        migrations.CreateModel(
 
            name='PastEvent',
 
            fields=[
 
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 
                ('year', models.IntegerField(unique=True)),
 
                ('name', models.CharField(max_length=255, unique=True)),
 
            ],
 
        ),
 
        migrations.AddField(
 
            model_name='attendeeprofile',
 
            name='past_lca',
 
            field=models.ManyToManyField(blank=True, to='pinaxcon_registrasion.PastEvent', verbose_name=b'Which past linux.conf.au events have you attended?'),
 
        ),
 
        migrations.RunPython(populate),
 
    ]
pinaxcon/registrasion/migrations/0015_auto_20221208_0102.py
Show inline comments
 
new file 100644
 
# Generated by Django 2.2.28 on 2022-12-07 14:02
 

	
 
from django.db import migrations, models
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    dependencies = [
 
        ('pinaxcon_registrasion', '0014_auto_20201123_2319'),
 
    ]
 

	
 
    operations = [
 
        migrations.AlterField(
 
            model_name='attendeeprofile',
 
            name='address_line_1',
 
            field=models.CharField(blank=True, help_text='This address, if provided, will appear on your invoices. It is also where we will ship your Open Hardware Kit if you are allocated one.', max_length=1024, verbose_name='Address line 1'),
 
        ),
 
        migrations.AlterField(
 
            model_name='attendeeprofile',
 
            name='children',
 
            field=models.CharField(blank=True, help_text="Everything Open is a family friendly conference and provides free child-care for pre-school children from 6 months up to 5 years. We hope to also provide a programme for older children and will let you know closer to the conference. If you're wanting to bring your children, please let us know their age(s) so we can ensure we have enough spaces available.", max_length=256, verbose_name='Child Ages and Information'),
 
        ),
 
        migrations.AlterField(
 
            model_name='attendeeprofile',
 
            name='lca_chat',
 
            field=models.BooleanField(blank=True, default=False, help_text='lca-chat is a high-traffic mailing list used by attendees during the week of the conference for general discussion.', verbose_name='Subscribe to the chat mailing list'),
 
        ),
 
        migrations.AlterField(
 
            model_name='attendeeprofile',
 
            name='of_legal_age',
 
            field=models.BooleanField(blank=True, help_text='Being under 18 will not stop you from attending the conference. We need to know whether you are over 18 to allow us to cater for you at venues that serve alcohol.', verbose_name='Are you over 18?'),
 
        ),
 
        migrations.AlterField(
 
            model_name='attendeeprofile',
 
            name='past_lca',
 
            field=models.ManyToManyField(blank=True, to='pinaxcon_registrasion.PastEvent', verbose_name='Which past events have you attended?'),
 
        ),
 
    ]
pinaxcon/registrasion/models.py
Show inline comments
 
from textwrap import wrap
 
from django.core.exceptions import ValidationError
 
from django.db import models
 
from django.utils.encoding import python_2_unicode_compatible
 
from django_countries.fields import CountryField
 
from registrasion import models as rego
 

	
 
@python_2_unicode_compatible
 
class PastEvent(models.Model):
 
    ''' This is populated in 0001_initial.py '''
 

	
 
    def __str__(self):
 
        return self.name
 

	
 
    year = models.IntegerField(unique=True,)
 
    name = models.CharField(max_length=255, unique=True,)
 

	
 

	
 
class AttendeeProfile(rego.AttendeeProfileBase):
 

	
 
    @classmethod
 
    def name_field(cls):
 
        ''' This is used to pre-fill the attendee's name from the
 
        speaker profile. If it's None, that functionality is disabled. '''
 
        return "name"
 

	
 
    def invoice_recipient(self):
 

	
 
        lines = [
 
            self.name_per_invoice,
 
        ]
 

	
 
        if self.company:
 
            lines.append("C/- " + self.company)
 

	
 
        if self.address_line_1:
 
            lines.append(self.address_line_1)
 

	
 
        if self.address_line_2:
 
            lines.append(self.address_line_2)
 

	
 
        if self.address_suburb or self.address_postcode:
 
            lines.append("%s %s" % (
 
                self.address_suburb or "",
 
                self.address_postcode or "",
 
            ))
 

	
 
        if self.state:
 
            lines.append(self.state)
 

	
 
        if self.country:
 
            lines.append(self.country.name)
 

	
 
        return "\n".join(lines)
 

	
 
    def clean(self):
 
        errors = []
 
        if self.country == "AU" and not self.state:
 
            errors.append(
 
                ("state", "Australians must list their state"),
 
            )
 

	
 
        if self.address_line_2 and not self.address_line_1:
 
            errors.append((
 
                "address_line_1",
 
                "Please fill in line 1 before filling line 2",
 
            ))
 

	
 
        if errors:
 
            raise ValidationError(dict(errors))
 

	
 
    def save(self):
 
        if not self.name_per_invoice:
 
            self.name_per_invoice = self.name
 
        super(AttendeeProfile, self).save()
 

	
 
    # Things that appear on badge
 
    name = models.CharField(
 
        verbose_name="Your name (for your conference nametag)",
 
        max_length=64,
 
        help_text="Your name, as you'd like it to appear on your badge. ",
 
    )
 
    company = models.CharField(
 
        verbose_name="Company",
 
        max_length=64,
 
        help_text="The name of your company, as you'd like it on your badge",
 
        blank=True,
 
    )
 

	
 
    free_text_1 = models.CharField(
 
        max_length=64,
 
        verbose_name="Free text line 1",
 
        help_text="A line of free text that will appear on your badge. Use "
 
                  "this for your Twitter handle, IRC nick, your preferred "
 
                  "pronouns or anything else you'd like people to see on "
 
                  "your badge.",
 
        blank=True,
 
    )
 
    free_text_2 = models.CharField(
 
        max_length=64,
 
        verbose_name="Free text line 2",
 
        blank=True,
 
    )
 

	
 
    # Other important Information
 
    name_per_invoice = models.CharField(
 
        verbose_name="Your legal name (for invoicing purposes)",
 
        max_length=256,
 
        help_text="If your legal name is different to the name on your badge, "
 
                  "fill this in, and we'll put it on your invoice. Otherwise, "
 
                  "leave it blank.",
 
        blank=True,
 
        )
 

	
 
    address_line_1 = models.CharField(
 
        verbose_name="Address line 1",
 
        help_text="This address, if provided, will appear on your invoices. "
 
                  "It is also where we will ship your Open Hardware Kit "
 
                  "if you are allocated one.",
 
        max_length=1024,
 
        blank=True,
 
    )
 
    address_line_2 = models.CharField(
 
        verbose_name="Address line 2",
 
        max_length=1024,
 
        blank=True,
 
    )
 
    address_suburb = models.CharField(
 
        verbose_name="City/Town/Suburb",
 
        max_length=1024,
 
        blank=True,
 
    )
 
    address_postcode = models.CharField(
 
        verbose_name="Postal/Zip code",
 
        max_length=1024,
 
        blank=True,
 
    )
 
    country = CountryField(
 
        verbose_name="Country",
 
        default="AU",
 
    )
 
    state = models.CharField(
 
        max_length=256,
 
        verbose_name="State/Territory/Province",
 
        help_text="If your Country is Australia, you must list a state.",
 
        blank=True,
 
    )
 

	
 
    of_legal_age = models.BooleanField(
 
        verbose_name="Are you over 18?",
 
        help_text="Being under 18 will not stop you from attending the "
 
                  "conference. We need to know whether you are over 18 to "
 
                  "allow us to cater for you at venues that serve alcohol.",
 
        blank=True,
 
    )
 
    dietary_restrictions = models.CharField(
 
        verbose_name="Food allergies, intolerances, or dietary restrictions",
 
        max_length=256,
 
        blank=True,
 
    )
 
    accessibility_requirements = models.CharField(
 
        verbose_name="Accessibility-related requirements",
 
        max_length=256,
 
        blank=True,
 
    )
 
    gender = models.CharField(
 
        verbose_name="Gender",
 
        help_text="Gender data will only be used for demographic purposes.",
 
        max_length=64,
 
        blank=True,
 
    )
 

	
 
    children = models.CharField(
 
        verbose_name="Child Ages and Information",
 
        max_length=256,
 
        help_text="Linux.conf.au is a family friendly conference and provides "
 
        help_text="Everything Open is a family friendly conference and provides "
 
            "free child-care for pre-school children from 6 months up to 5 years. We "
 
            "hope to also provide a programme for older children and will let you "
 
            "know closer to the conference. If you're wanting to bring your children "
 
            "to LCA, please let us know their age(s) so we can ensure we have "
 
            "know closer to the conference. If you're wanting to bring your children, "
 
            "please let us know their age(s) so we can ensure we have "
 
            "enough spaces available.",
 
        blank=True
 
    )
 

	
 
    linux_australia = models.BooleanField(
 
        verbose_name="Linux Australia membership",
 
        help_text="Select this field to register for free "
 
                  "<a href='http://www.linux.org.au/'>Linux Australia</a> "
 
                  "membership.",
 
        blank=True,
 
    )
 

	
 
    lca_announce = models.BooleanField(
 
        verbose_name="Subscribe to lca-announce list",
 
        help_text="Select to be subscribed to the low-traffic lca-announce "
 
                  "mailing list",
 
        blank=True,
 
    )
 

	
 
    lca_chat = models.BooleanField(
 
        verbose_name="Subscribe to the LCA chat list",
 
        verbose_name="Subscribe to the chat mailing list",
 
        help_text="lca-chat is a high-traffic mailing list used by "
 
                  "attendees during the week of the conference for general "
 
                  "discussion.",
 
        blank=True,
 
        default=False,
 
    )
 

	
 
    future_conference = models.BooleanField(
 
        verbose_name = "Reuse my login for future Linux Australia conferences?",
 
        help_text="Select to have your login details made available to future "
 
                  "Linux Australia conferences who share the same Single Sign "
 
                  "On system.",
 
        blank=True,
 
        default=False,
 
    )
 

	
 
    past_lca = models.ManyToManyField(
 
        PastEvent,
 
        verbose_name="Which past linux.conf.au events have you attended?",
 
        verbose_name="Which past events have you attended?",
 
        blank=True,
 
    )
 

	
 
    def first_name(self):
 
        return wrap(self.name, 15, break_long_words=False)[0]
 

	
 
    def last_name(self):
 
        names = wrap(self.name, 15, break_long_words=False)
 
        return names[1] if len(names) > 1 else ''
pinaxcon/settings.py
Show inline comments
 
from decimal import Decimal
 
import os
 
import sys
 

	
 
import django
 
import dj_database_url
 
import saml2
 
import saml2.saml
 

	
 
from datetime import date, datetime, timedelta
 
import pytz
 

	
 
from dataclasses import dataclass
 

	
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
 
DJANGO_ROOT = os.path.abspath(os.path.dirname(django.__file__))
 
BASE_DIR = PACKAGE_ROOT
 
sys.path.append(os.path.join(PROJECT_ROOT, 'vendor'))
 

	
 

	
 
### USER SETTINGS
 
DEV_MODE = os.environ.get("SYMPOSION_DEV_MODE", None)
 
DEBUG = os.environ.get('SYMPOSION_APP_DEBUG', '0')
 
if isinstance(DEBUG, str):
 
    try:
 
        i = int(DEBUG)
 
        if not i in [0, 1]:
 
            raise ValueError("not 0 or 1")
 
        DEBUG = bool(i)
 
    except ValueError:
 
        sys.exit('DEBUG env var must be set to string value of a 0 or 1')
 
else:
 
    sys.exit('DEBUG env var is in unexpected format.  Should be a string'
 
             'containing either a 0 or a 1 - Got type %s' % type(DEBUG))
 

	
 
DATABASES = {}
 
DATABASES['default'] = dj_database_url.config(conn_max_age=600)
 
if DATABASES['default']['ENGINE'] == 'django.db.backends.mysql':
 
    DATABASES['default']['OPTIONS'] = {'charset': 'utf8mb4'}
 

	
 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 
EMAIL_HOST = os.environ.get('EMAIL_HOST', None)
 
EMAIL_PORT = os.environ.get('EMAIL_PORT', 25)
 
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', None)
 
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', None)
 
DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
 
EMAIL_USE_SSL = False
 
EMAIL_USE_TLS = False
 
_EMAIL_SSL_FLAVOR=os.environ.get('EMAIL_SSL_FLAVOR', None)
 
if _EMAIL_SSL_FLAVOR == "TLS":
 
    EMAIL_USE_TLS = True
 
elif _EMAIL_SSL_FLAVOR == "SSL":
 
    EMAIL_USE_SSL = True
 

	
 
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', None)
 

	
 
PINAX_STRIPE_PUBLIC_KEY = os.environ.get('STRIPE_PUBLIC_KEY', None)
 
PINAX_STRIPE_SECRET_KEY = os.environ.get('STRIPE_SECRET_KEY', None)
 
PINAX_STRIPE_SEND_EMAIL_RECEIPTS = False
 

	
 
ANALYTICS_KEY = os.environ.get('ANALYTICS_KEY', None)
 

	
 
saml2_entityid = os.environ.get('SAML2_ENTITYID', None)
 
saml2_sp_name = os.environ.get('SAML2_SP_NAME', None)
 
saml2_sp_assertion_service = os.environ.get('SAML2_SP_ASSERTION_SERVICE', None)
 
saml2_sp_slo_rdir = os.environ.get('SAML2_SP_SLO_RDIR', None)
 
saml2_sp_slo_post = os.environ.get('SAML2_SP_SLO_POST', None)
 

	
 
saml2_idp_metadata = {
 
    'local': [os.environ.get('SAML2_IDP_METADATA_FILE', None)],
 
    }
 
saml2_signing_key = os.environ.get('SAML2_SIGNING_KEY', None)
 
saml2_signing_crt = os.environ.get('SAML2_SIGNING_CRT', None)
 
saml2_encr_key = os.environ.get('SAML2_ENCRYPTION_KEY', None)
 
saml2_encr_crt = os.environ.get('SAML2_ENCRYPTION_CRT', None)
 
saml2_contact = {
 
    'given_name': os.environ.get("META_GIVEN_NAME", 'Bastard'),
 
    'sur_name': os.environ.get('META_FAM_NAME', 'Operator'),
 
    'company': os.environ.get('META_COMPANY', 'Corp1'),
 
    'email_address': os.environ.get('META_EMAIL', 'op@example.com'),
 
    'contact_type': 'technical'},
 

	
 
fail = False
 

	
 
BADGER_DEFAULT_SVG = 'registrasion/badge.svg'
 
BADGER_DEFAULT_FORM = "registrasion/badge_form.html"
 

	
 
if SECRET_KEY is None:
 
    print("FAILURE: You need to supply a DJANGO_SECRET_KEY "
 
          "environment variable")
 
    fail = True
 

	
 
if PINAX_STRIPE_PUBLIC_KEY is None:
 
    print("FAILURE: You need to supply a STRIPE_PUBLIC_KEY "
 
          "environment variable")
 
    fail = True
 

	
 
if PINAX_STRIPE_SECRET_KEY is None:
 
    print("FAILURE: You need to supply a STRIPE_SECRET_KEY "
 
          "environment variable")
 
    fail = True
 

	
 
if fail:
 
    sys.exit('FAILURE: Missing environment variables.')
 

	
 
### Standard settings
 

	
 
ADMIN_USERNAMES = []
 

	
 
if DEV_MODE and DEV_MODE == "LAPTOP":
 
    CACHES = {
 
        'default': {
 
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
 
        }
 
    }
 
else:
 
    CACHES = {
 
        'default': {
 
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
 
            'LOCATION': 'unique-snowflake',
 
        }
 
    }
 

	
 

	
 
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '*']
 

	
 
TIME_ZONE = "Australia/Sydney"
 
DATE_FORMAT = "j F Y"
 
LANGUAGE_CODE = "en-au"
 

	
 
SITE_ID = int(os.environ.get("SITE_ID", 1))
 
USE_I18N = True
 
USE_L10N = True
 
USE_TZ = True
 

	
 
MEDIA_ROOT = os.environ.get("MEDIA_ROOT", os.path.join(PACKAGE_ROOT, "site_media", "media"))
 
MEDIA_URL = "/site_media/media/"
 

	
 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static', 'build')
 
STATIC_URL = '/static/build/'
 

	
 
STATICFILES_DIRS = [
 
    os.path.join(PROJECT_ROOT, 'static', 'src'),
 
]
 

	
 
STATICFILES_FINDERS = [
 
    "django.contrib.staticfiles.finders.FileSystemFinder",
 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
 
    "sass_processor.finders.CssFinder",
 
]
 

	
 
TEMPLATES = [
 
    {
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 
        "DIRS": [
 
            os.path.join(PACKAGE_ROOT, "templates"),
 
            os.path.join(DJANGO_ROOT, 'forms/templates')
 
        ],
 
        "APP_DIRS": True,
 
        "OPTIONS": {
 
            "debug": DEBUG,
 
            "context_processors": [
 
                "django.contrib.auth.context_processors.auth",
 
                "django.template.context_processors.debug",
 
                "django.template.context_processors.i18n",
 
                "django.template.context_processors.media",
 
                "django.template.context_processors.static",
 
                "django.template.context_processors.tz",
 
                "django.template.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
                "django_settings_export.settings_export",
 
            ],
 
        },
 
    },
 
]
 

	
 
MIDDLEWARE = [
 
    "whitenoise.middleware.WhiteNoiseMiddleware",
 
    "django.contrib.sessions.middleware.SessionMiddleware",
 
    "django.middleware.common.CommonMiddleware",
 
    "django.middleware.csrf.CsrfViewMiddleware",
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "djangosaml2.middleware.SamlSessionMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
 
    "debug_toolbar.middleware.DebugToolbarMiddleware",
 
    "reversion.middleware.RevisionMiddleware",
 
    "waffle.middleware.WaffleMiddleware",
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
 
    "django.contrib.flatpages.middleware.FlatpageFallbackMiddleware",
 
    'pinaxcon.monkey_patch.MonkeyPatchMiddleware',
 
]
 

	
 
if DEV_MODE and DEV_MODE == "LAPTOP":
 
    ROOT_URLCONF = "pinaxcon.devmode_urls"
 
else:
 
    ROOT_URLCONF = "pinaxcon.urls"
 

	
 
# Python dotted path to the WSGI application used by Django's runserver.
 
WSGI_APPLICATION = "pinaxcon.wsgi.application"
 

	
 
INSTALLED_APPS = [
 
    "whitenoise.runserver_nostatic",
 
    "django.contrib.admin",
 
    "django.contrib.auth",
 
    "django.contrib.contenttypes",
 
    "django.contrib.flatpages",
 
    "django.contrib.messages",
 
    "django.contrib.sessions",
 
    "django.contrib.sites",
 
    "django.contrib.staticfiles",
 
    "django.contrib.humanize",
 
    "debug_toolbar",
 

	
 
    'djangosaml2',
 

	
 
    # theme
 
    "bootstrapform",
 
    "pinax_theme_bootstrap",
 
    "sass_processor",
 
    "capture_tag",
 

	
 
    # external
 
    "easy_thumbnails",
 
    "taggit",
 
    "reversion",
 
    "sitetree",
 
    "django_jsonfield_backport",
 
    "pinax.eventlog",
 
    "timezone_field",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.teams",
 

	
 
    # Registrasion
 
    "registrasion",
 

	
 
    # Registrasion-stripe
 
    "pinax.stripe",
 
    "django_countries",
 
    "registripe",
 

	
 
    #registrasion-desk
 
    "regidesk",
 

	
 
    # admin - required by registrasion ??
 
    "nested_admin",
 

	
 
    # project
 
    "pinaxcon",
 
    "pinaxcon.proposals",
 
    "pinaxcon.registrasion",
 
    "pinaxcon.raffle",
 
    "jquery",
 
    "djangoformsetjs",
 

	
 
    # testing and rollout
 
    "django_nose",
 
    "waffle",
 

	
 
    "crispy_forms",
 
]
 

	
 
CRISPY_TEMPLATE_PACK = "bootstrap4"
 

	
 
DEBUG_TOOLBAR_PANELS = [
 
    'debug_toolbar.panels.versions.VersionsPanel',
 
    'debug_toolbar.panels.timer.TimerPanel',
 
    'debug_toolbar.panels.settings.SettingsPanel',
 
    'debug_toolbar.panels.headers.HeadersPanel',
 
    'debug_toolbar.panels.request.RequestPanel',
 
    'debug_toolbar.panels.sql.SQLPanel',
 
    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
 
    'debug_toolbar.panels.cache.CachePanel',
 
    'debug_toolbar.panels.signals.SignalsPanel',
 
    'debug_toolbar.panels.logging.LoggingPanel',
 
    'debug_toolbar.panels.templates.TemplatesPanel',
 
    'debug_toolbar.panels.redirects.RedirectsPanel',
 
]
 

	
 
DEBUG_TOOLBAR_CONFIG = {
 
    'INTERCEPT_REDIRECTS': False,
 
}
 

	
 
INTERNAL_IPS = [
 
    '127.0.0.1',
 
]
 

	
 
from debug_toolbar.panels.logging import collector
 
LOGGING = {
 
    'version': 1,
 
    'disable_existing_loggers': False,
 
    'formatters': {
 
        'verbose': {
 
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
 
        },
 
        'simple': {
 
            'format': '%(asctime)s %(levelname)s $(module)s %(message)s'
 
        },
 
    },
 
    'filters': {
 
        'require_debug_false': {
 
            '()': 'django.utils.log.RequireDebugFalse'
 
        }
 
    },
 
    'handlers': {
 
        'console': {
 
            'level': 'DEBUG',
 
            'class': 'logging.StreamHandler',
 
            'formatter': 'simple'
 
        },
 
        'mail_admins': {
 
            'level': 'ERROR',
 
            'filters': ['require_debug_false'],
 
            'class': 'django.utils.log.AdminEmailHandler',
 
            'include_html': True,
 
        },
 
        'djdt_log': {
 
            'level': 'DEBUG',
 
            'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler',
 
            'collector': collector,
 
        },
 
    },
 
    'loggers': {
 
        'django.request': {
 
            'handlers': ['mail_admins'],
 
            'level': 'DEBUG',
 
            'propagate': True,
 
        },
 
        'symposion.request': {
 
            'handlers': ['mail_admins'],
 
            'level': 'DEBUG',
 
            'propagate': True,
 
        },
 
    },
 
    'root': {
 
        'handlers': ['console', 'djdt_log'],
 
        'level': 'DEBUG'
 
    },
 
}
 
FIXTURE_DIRS = [
 
    os.path.join(PROJECT_ROOT, "fixtures"),
 
]
 

	
 
AUTHENTICATION_BACKENDS = [
 
    'symposion.teams.backends.TeamPermissionsBackend',
 
    'django.contrib.auth.backends.ModelBackend',
 
    'djangosaml2.backends.Saml2Backend',
 
]
 

	
 
LOGIN_URL = '/saml2/login/'
 
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
 

	
 
CONFERENCE_ID = 1
 
PROPOSAL_FORMS = {
 
    "talk": "pinaxcon.proposals.forms.TalkProposalForm",
 
    "tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
 
    "miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm",
 
    ### LCA2022 Miniconfs
 
    "glam-community-miniconf": "pinaxcon.proposals.forms.GlamCommunityProposalForm",
 
    "kernel-miniconf": "pinaxcon.proposals.forms.KernelProposalForm",
 
    "open-hardware-miniconf": "pinaxcon.proposals.forms.OpenHardwareProposalForm",
 
    "sysadmin-miniconf": "pinaxcon.proposals.forms.SysAdminProposalForm",
 
}
 
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk", "Miniconf")
 
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
 

	
 
# Registrasion bits:
 
ATTENDEE_PROFILE_MODEL = "pinaxcon.registrasion.models.AttendeeProfile"
 
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
 
INVOICE_CURRENCY = "AUD"
 
GST_RATE =  Decimal('0.1')
 
TICKET_PRODUCT_CATEGORY = 1
 
TERMS_PRODUCT_CATEGORY = 2
 
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
 

	
 
#REGIDESK
 
REGIDESK_BOARDING_GROUP = "Ready For Boarding"
 

	
 
# CSRF custom error screen
 
CSRF_FAILURE_VIEW = "pinaxcon.csrf_view.csrf_failure"
 

	
 
# Use nose to run all tests
 
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 

	
 
# Tell nose to measure coverage on the 'foo' and 'bar' apps
 
NOSE_ARGS = [
 
    '--with-coverage',
 
    '--cover-package=registrasion.controllers,registrasion.models',
 
]
 

	
 
SASS_PROCESSOR_INCLUDE_DIRS = [
 
    os.path.join(PROJECT_ROOT, 'static/src/bootstrap/scss'),
 
    os.path.join(PROJECT_ROOT, 'static/src/scss'),
 
]
 

	
 
xmlsec_binary = '/usr/bin/xmlsec1'
 
if not os.path.isfile(xmlsec_binary):
 
        sys.exit('ERROR: xmlsec1 binary missing, EXITING')
 

	
 
SAML_ATTRIBUTE_MAPPING = {
 
    'uid': ('username', ),
 
    'mail': ('email', ),
 
    'givenName': ('first_name', ),
 
    'sn': ('last_name', ),
 
}
 
SAML_CONFIG = {
 
    'xmlsec_binary': xmlsec_binary,
 
    'entityid': saml2_entityid,
 
    'attribute_map_dir': os.path.join(PACKAGE_ROOT, 'saml2/attribute-maps'),
 
    'service': {
 
        'sp': {
 
            'name': saml2_sp_name,
 
            'endpoints': {
 
                'assertion_consumer_service': [
 
                    saml2_sp_assertion_service,
 
                    ],
 
                'single_logout_service': [
 
                    (saml2_sp_slo_rdir, saml2.BINDING_HTTP_REDIRECT),
 
                    (saml2_sp_slo_post, saml2.BINDING_HTTP_POST),
 
                    ],
 
                },
 
            'logout_requests_signed': True,
 
            'required_attributes': ['uid', 'mail', 'givenName', 'sn'],
 
            },
 
        },
 
    'metadata': saml2_idp_metadata,
 
    'debug': 0,
 
    'key_file': saml2_signing_key,
 
    'cert_file': saml2_signing_crt,
 
    'encryption_keypairs': [{
 
        'key_file': saml2_encr_key,
 
        'cert_file': saml2_encr_crt,
 
    }],
 
    'contact_person': saml2_contact,
 
    'valid_for': 10,
 
}
 

	
 
if 'SAML_CONFIG_LOADER' in os.environ:
 
    SAML_CONFIG_LOADER = os.environ.get('SAML_CONFIG_LOADER')
 

	
 
DEFAULT_FILE_STORAGE = os.environ.get('DEFAULT_FILE_STORAGE', 'gapc_storage.storage.GoogleCloudStorage')
 
GAPC_STORAGE = {
 
    'num_retries': 2,
 
}
 

	
 
SETTINGS_EXPORT = [
 
    'DEBUG',
 
    'ANALYTICS_KEY',
 
    'TIME_ZONE',
 
    'LCA_START',
 
    'CONF_START',
 
    'CONFERENCE_EMAIL',
 
]
 

	
 
if DEV_MODE and DEV_MODE == "LAPTOP":
 
    print("ENABLING LAPTOP MODE")
 
    from .devmode_settings import *
 

	
 

	
 
class Category(object):
 
    tickets = []
 

	
 
    @classmethod
 
    def order(cls, ticket) -> int:
 
        return (cls.tickets.index(ticket) + 1) * 10
 

	
 

	
 
@dataclass(frozen=True)
 
class Ticket:
 
    name: str
 
    regular_price: Decimal
 
    earlybird_price: Decimal
 

	
 
    def earlybird_discount(self):
 
        return self.regular_price - self.earlybird_price
 

	
 

	
 
@dataclass(frozen=True)
 
class DinnerTicket:
 
    name: str
 
    price: Decimal
 
    description: str
 
    reservation: timedelta
 
    cat: Category
 

	
 
    def order(self):
 
        return self.cat.order(self)
 

	
 

	
 
class PenguinDinnerTicket(DinnerTicket):
 
    pass
 

	
 

	
 
class SpeakersDinnerTicket(DinnerTicket):
 
    pass
 

	
 

	
 
class SpeakersDinnerCat(Category):
 
    @classmethod
 
    def create(cls, name: str, price: Decimal, description: str, reservation: timedelta) -> SpeakersDinnerTicket:
 
        t = SpeakersDinnerTicket(name, price, description, reservation, cls)
 
        cls.tickets.append(t)
 
        return t
 

	
 

	
 
class PenguinDinnerCat(Category):
 
    @classmethod
 
    def create(cls, name: str, price: Decimal, description: str, reservation: timedelta) -> PenguinDinnerTicket:
 
        t = PenguinDinnerTicket(name, price, description, reservation, cls)
 
        cls.tickets.append(t)
 
        return t
 

	
 

	
 
CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'linux.conf.au')
 
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'LCA')
 
CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'Everything Open')
 
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'EO')
 
CONFERENCE_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL)
 
LCA_TZINFO = pytz.timezone(TIME_ZONE)
 
LCA_START = LCA_TZINFO.localize(datetime(2022, 1, 14))
 
LCA_END = LCA_TZINFO.localize(datetime(2022, 1, 16))
 
LCA_MINICONF_END = LCA_TZINFO.localize(datetime(2022, 1, 14, 23, 59))
 
EARLY_BIRD_DEADLINE = LCA_TZINFO.localize(datetime(2022, 12, 1))
 
PENGUIN_DINNER_TICKET_DATE = date(2022, 1, 14)
 
SPEAKER_DINNER_TICKET_DATE = date(2022, 1, 15)
 
PDNS_TICKET_DATE = date(2022, 1, 16)
 
CONF_TZINFO = pytz.timezone(TIME_ZONE)
 
CONF_START = CONF_TZINFO.localize(datetime(2023, 3, 14))
 
CONF_END = CONF_TZINFO.localize(datetime(2023, 3, 16))
 
CONF_MINICONF_END = CONF_TZINFO.localize(datetime(2023, 3, 14, 23, 59))
 
EARLY_BIRD_DEADLINE = CONF_TZINFO.localize(datetime(2023, 1, 28))
 
PENGUIN_DINNER_TICKET_DATE = date(2023, 3, 15)
 
SPEAKER_DINNER_TICKET_DATE = date(2023, 3, 14)
 
PDNS_TICKET_DATE = date(2023, 3, 16)
 

	
 
TSHIRT_PRICE = Decimal("25.00")
 

	
 
CONTRIBUTOR = Ticket("Contributor", Decimal("300.00"), Decimal("250.00"))
 
PROFESSIONAL = Ticket("Professional", Decimal("125.00"), Decimal("100.00"))
 
HOBBYIST = Ticket("Hobbyist", Decimal("70.00"), None)
 
STUDENT = Ticket("Student", Decimal("30.00"), None)
 
MINICONF_ONLY = Ticket("Miniconf Only", Decimal("25.00"), None)
 

	
 
MEDIA = Ticket("Media", Decimal("0.0"), None)
 
SPEAKER = Ticket("Speaker", Decimal("0.0"), None)
 
SPONSOR = Ticket("Sponsor", Decimal("0.0"), None)
 

	
 
CONFERENCE_ORG = Ticket("Conference Organiser", Decimal("0.0"), None)
 
CONFERENCE_VOL = Ticket("Conference Volunteer", Decimal("0.0"), None)
 

	
 
PENGUIN_DINNER = PenguinDinnerCat
 
PENGUIN_DINNER_ADULT = PenguinDinnerCat.create(
 
    "Adult", Decimal("95.00"),
 
    "Includes an adult's meal and full beverage service.",
 
    timedelta(hours=1))
 
PENGUIN_DINNER_CHILD = PenguinDinnerCat.create(
 
    "Child", Decimal("50.00"),
 
    "Children 14 and under. "
 
    "Includes a child's meal and soft drink service.",
 
    timedelta(hours=1))
 
PENGUIN_DINNER_INFANT = PenguinDinnerCat.create(
 
    "Infant", Decimal("0.0"),
 
    "Includes no food or beverage service.",
 
    timedelta(hours=1))
 

	
 
SPEAKERS_DINNER = SpeakersDinnerCat
 

	
 
SPEAKERS_DINNER_ADULT = SpeakersDinnerCat.create(
 
    "Adult", Decimal("100.00"),
 
    "Includes an adult's meal and full beverage service.",
 
    timedelta(hours=1))
 

	
 
# SPEAKERS_DINNER_CHILD = SpeakersDinnerCat.create(
 
#     "Child", Decimal("60.00"),
 
#     "Children 14 and under. "
 
#     "Includes a child's meal and soft drink service.",
 
#     timedelta(hours=1))
 

	
 
# SPEAKERS_DINNER_INFANT = SpeakersDinnerCat.create(
 
#     "Infant", Decimal("00.00"),
 
#     "Infant must be seated in an adult's lap. "
 
#     "No food or beverage service.",
 
#     timedelta(hours=1))
 

	
 

	
 
# Venueless integration
 
VENUELESS_URL = os.environ.get('VENUELESS_URL', None)
 
VENUELESS_AUDIENCE = os.environ.get('VENUELESS_AUDIENCE', "venueless")
 
VENUELESS_TOKEN_ISSUER = os.environ.get('VENUELESS_TOKEN_ISSUER', "any")
 
VENUELESS_SECRET = os.environ.get('VENUELESS_SECRET', SECRET_KEY)
pinaxcon/templates/nav.html
Show inline comments
 
{% load sitetree %}
 
{% load static %}
 

	
 
<nav class="navbar navbar-expand-lg navbar-light bg-blaze">
 
<nav class="navbar navbar-expand-lg navbar-light bg-dawn-sea">
 
  <div class="container">
 
    <a class="navbar-brand" href="/">
 
      <img src="{% static 'lca/lca2022.svg' %}" alt="linux.conf.au 2022 logo" height="56px">
 
      <img src="{% static 'img/eo2023.svg' %}" alt="Everything Open 2023 logo" height="56px">
 
    </a>
 

	
 
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
 
      <span class="navbar-toggler-icon"></span>
 
    </button>
 

	
 
    {% sitetree_menu from "main" include "trunk" template "sitetree_header.html" %}
 
  </div>
 
</nav>
pinaxcon/templates/registrasion/badge.svg
Show inline comments
 
<?xml version="1.0" encoding="UTF-8"?>
 
<!--
 
{% load registrasion_tags %}
 
{% load lca2018_tags %}
 
{% items_purchased as purchased %}
 
{% items_pending as pending %}
 
{% items_purchased 1 as ticket %}
 
{% total_items_purchased 3 as penguin_dinner_count %}
 
{% total_items_purchased 4 as speakers_dinner_count %}
 
{% total_items_purchased 5 as pdns_count %}
 
{% ticket_type as ticket_type %}
 
-->
 
<svg xmlns="http://www.w3.org/2000/svg" width="105.28mm" height="148mm" viewBox="0 0 296 416">
 
    <title>Badge Preview</title>
 
    <defs>
 
        <clipPath id="clip-path">
 
            <path d="M254.71,248.07s1.74,3.14,1.56,4.41a22.72,22.72,0,0,1-1,4.21c-.34.81-1.73,2.61-2.42,2.7s-4.34,3.05-5.38,2.69a5.85,5.85,0,0,1-1.91-1.62c-2.25-3.31-.43-5.12-.17-5.57s2-1.88,2.86-3,2.43-3.06,3.21-3.42S254.46,247.7,254.71,248.07Z" fill="none"/>
 
        </clipPath>
 
        <clipPath id="clip-path-2">
 
            <rect x="243.03" y="246.54" width="14.63" height="16.96" fill="none"/>
 
        </clipPath>
 
        <clipPath id="clip-path-3">
 
            <path d="M267.29,266.85s1.17-1.86,1.34-2.29.34-1.11.41-1.38a.7.7,0,0,1,.08-.2,3,3,0,0,1,.52-.71c.21-.18.48-.53.69-.13s1.08,2.29,1.17,2.46.83.55,1,.78,1.21.83,1.34,1,.91.35,1.25.87-1.94-.43-2.46-.69a4.78,4.78,0,0,0-1.75-.42,7.26,7.26,0,0,0-2.16,0c-.34.17-1.34.43-1.47.65" fill="none"/>
 
        </clipPath>
 
        <clipPath id="clip-path-4">
 
            <rect x="265.85" y="260.58" width="10.68" height="8.2" fill="none"/>
 
        </clipPath>
 
    </defs>
 
    <g id="badge_preview" data-name="Badge Preview">
 
        <path d="M49.4,401.09H75.57a8.39,8.39,0,0,1-.78,2.39H49.4Z" fill="#4181c3"/>
 
        <path d="M49.4,378.48H74.84a11.33,11.33,0,0,1,.77,2.39H49.4Z" fill="#4181c3"/>
 
        <path d="M54.12,392.05H72.27a14,14,0,0,1,2.13,2.39H54.12Z" fill="#4181c3"/>
 
        <path d="M68.27,399h7.57a8.91,8.91,0,0,0-.41-2.39H68.27Z" fill="#4181c3"/>
 
        <path d="M54.12,389.91H72.3a13.41,13.41,0,0,0,2.11-2.38H54.12Z" fill="#4181c3"/>
 
        <path d="M68.27,383h7.54a10.29,10.29,0,0,1-.39,2.38H68.27Z" fill="#4181c3"/>
 
        <path d="M49.4,405.62H73.06c-2.1,1.77-4,2.38-7.2,2.38H49.4Z" fill="#4181c3"/>
 
        <path d="M49.4,376.35H73.06c-2.1-1.78-4-2.39-7.2-2.39H49.4Z" fill="#4181c3"/>
 
        <rect x="30.53" y="373.96" width="16.51" height="2.39" fill="#4181c3"/>
 
        <rect x="30.53" y="378.48" width="16.51" height="2.39" fill="#4181c3"/>
 
        <rect x="30.53" y="401.09" width="16.51" height="2.39" fill="#4181c3"/>
 
        <rect x="35.25" y="396.57" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="35.25" y="392.05" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="35.25" y="387.53" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="35.25" y="383.01" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="54.12" y="396.57" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="54.12" y="383.01" width="7.08" height="2.39" fill="#4181c3"/>
 
        <polygon points="93.31 398.96 99.85 398.96 100.68 396.57 92.47 396.57 93.31 398.96" fill="#4181c3"/>
 
        <polygon points="91.73 394.44 101.42 394.44 102.26 392.05 90.9 392.05 91.73 394.44" fill="#4181c3"/>
 
        <rect x="30.53" y="405.62" width="16.51" height="2.39" fill="#4181c3"/>
 
        <polygon points="96.45 408 96.7 408 97.53 405.62 95.62 405.62 96.45 408" fill="#4181c3"/>
 
        <rect x="82.43" y="396.57" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="82.43" y="392.05" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="77.71" y="405.62" width="11.79" height="2.39" fill="#4181c3"/>
 
        <rect x="77.71" y="401.09" width="11.79" height="2.39" fill="#4181c3"/>
 
        <polygon points="94.88 403.48 98.28 403.48 99.11 401.09 94.05 401.09 94.88 403.48" fill="#4181c3"/>
 
        <rect x="103.66" y="396.57" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="103.66" y="392.05" width="7.08" height="2.39" fill="#4181c3"/>
 
        <rect x="103.65" y="405.62" width="11.79" height="2.39" fill="#4181c3"/>
 
        <rect x="103.66" y="401.09" width="11.79" height="2.39" fill="#4181c3"/>
 
        <polygon points="94.22 383 82.42 383 82.42 385.39 95.07 385.39 94.22 383" fill="#4181c3"/>
 
        <polygon points="97.33 387.53 96.58 389.67 95.83 387.53 82.43 387.53 82.43 389.91 89.5 389.91 89.5 388.03 90.16 389.91 103 389.91 103.65 388.03 103.65 388.05 103.66 388.05 103.66 389.91 110.73 389.91 110.73 387.53 97.33 387.53" fill="#4181c3"/>
 
        <polygon points="91.02 373.96 77.71 373.96 77.71 376.35 91.87 376.35 91.02 373.96" fill="#4181c3"/>
 
        <polygon points="92.62 378.48 77.71 378.48 77.71 380.87 93.47 380.87 92.62 378.48" fill="#4181c3"/>
 
        <polygon points="98.93 383 110.73 383 110.73 385.39 98.09 385.39 98.93 383" fill="#4181c3"/>
 
        <polygon points="102.14 373.96 115.45 373.96 115.45 376.35 101.29 376.35 102.14 373.96" fill="#4181c3"/>
 
        <polygon points="100.53 378.48 115.45 378.48 115.45 380.87 99.69 380.87 100.53 378.48" fill="#4181c3"/>
 
        <path d="M118,406.23a1.87,1.87,0,1,1,1.87,1.87A1.87,1.87,0,0,1,118,406.23Zm3.43,0a1.57,1.57,0,1,0-1.56,1.63A1.56,1.56,0,0,0,121.45,406.23Zm-.63,1h-.31l-.59-1h-.47v1h-.25v-2.08h.91c.55,0,.73.2.73.55s-.28.56-.65.57Zm-1-1.16c.3,0,.73.05.73-.38s-.27-.36-.52-.36h-.6v.74Z" fill="#4181c3"/>
 
        <rect x="118.88" y="404.36" width="2.88" height="3.76" fill="none"/>
 
        <path d="M105.06,365.54v.32h-3.39V361H105v.33H102v1.93h2.61v.31H102v2Z" fill="#231f20"/>
 
        <path d="M111.86,362.58a1.59,1.59,0,0,1,.39,1.15v2.13h-.35v-2.1a1.33,1.33,0,0,0-.3-.94,1.07,1.07,0,0,0-.84-.32,1.27,1.27,0,0,0-1,.38,1.46,1.46,0,0,0-.36,1v1.94h-.35v-2.1a1.33,1.33,0,0,0-.3-.94,1.07,1.07,0,0,0-.84-.32,1.24,1.24,0,0,0-1,.38,1.46,1.46,0,0,0-.36,1v1.94h-.35v-3.65h.33V363a1.42,1.42,0,0,1,.54-.6,1.69,1.69,0,0,1,.86-.21,1.51,1.51,0,0,1,.84.23,1.14,1.14,0,0,1,.5.65,1.41,1.41,0,0,1,.57-.64,1.69,1.69,0,0,1,.91-.24A1.39,1.39,0,0,1,111.86,362.58Z" fill="#231f20"/>
 
        <path d="M116.45,362.42a1.72,1.72,0,0,1,.65.66,2.12,2.12,0,0,1,0,1.92,1.72,1.72,0,0,1-.65.66,1.87,1.87,0,0,1-.92.23,1.65,1.65,0,0,1-.88-.23A1.61,1.61,0,0,1,114,365v2.19h-.35v-5H114v.86a1.53,1.53,0,0,1,.61-.65,1.7,1.7,0,0,1,.89-.24A1.78,1.78,0,0,1,116.45,362.42Zm-.19,3a1.34,1.34,0,0,0,.53-.55,1.76,1.76,0,0,0,0-1.59,1.34,1.34,0,0,0-.53-.55,1.44,1.44,0,0,0-.75-.19,1.51,1.51,0,0,0-.76.19,1.38,1.38,0,0,0-.52.55,1.76,1.76,0,0,0,0,1.59,1.38,1.38,0,0,0,.52.55,1.51,1.51,0,0,0,.76.2A1.45,1.45,0,0,0,116.26,365.38Z" fill="#231f20"/>
 
        <path d="M121.51,364.12h-3.15a1.47,1.47,0,0,0,.22.76,1.35,1.35,0,0,0,.55.51,1.55,1.55,0,0,0,.78.19,1.76,1.76,0,0,0,.66-.13,1.48,1.48,0,0,0,.51-.38l.2.23a1.67,1.67,0,0,1-.6.44,2,2,0,0,1-.78.15,1.94,1.94,0,0,1-1-.24,1.61,1.61,0,0,1-.67-.65,1.93,1.93,0,0,1-.24-1,2,2,0,0,1,.23-1,1.71,1.71,0,0,1,.62-.66,1.73,1.73,0,0,1,.9-.24,1.67,1.67,0,0,1,.89.24,1.56,1.56,0,0,1,.62.65,1.88,1.88,0,0,1,.23.95Zm-2.43-1.46a1.44,1.44,0,0,0-.5.48,1.68,1.68,0,0,0-.21.71h2.8a1.43,1.43,0,0,0-.71-1.19,1.49,1.49,0,0,0-1.38,0Z" fill="#231f20"/>
 
        <path d="M123.46,362.39a1.7,1.7,0,0,1,.87-.21v.34h-.09a1.2,1.2,0,0,0-.95.38A1.52,1.52,0,0,0,123,364v1.9h-.35v-3.65h.33v.8A1.29,1.29,0,0,1,123.46,362.39Z" fill="#231f20"/>
 
        <path d="M125.75,365.65a1.59,1.59,0,0,1-.65-.66,2,2,0,0,1,0-1.91,1.65,1.65,0,0,1,.65-.66,1.94,1.94,0,0,1,1.87,0,1.72,1.72,0,0,1,.65.66,2,2,0,0,1,0,1.91,1.65,1.65,0,0,1-.65.66,1.94,1.94,0,0,1-1.87,0Zm1.69-.27a1.38,1.38,0,0,0,.52-.55,1.76,1.76,0,0,0,0-1.59,1.38,1.38,0,0,0-.52-.55,1.48,1.48,0,0,0-.76-.19,1.44,1.44,0,0,0-.75.19,1.38,1.38,0,0,0-.52.55,1.68,1.68,0,0,0,0,1.59,1.38,1.38,0,0,0,.52.55,1.45,1.45,0,0,0,.75.2A1.49,1.49,0,0,0,127.44,365.38Z" fill="#231f20"/>
 
        <path d="M130.46,362.39a1.67,1.67,0,0,1,.87-.21v.34h-.09a1.2,1.2,0,0,0-1,.38A1.52,1.52,0,0,0,130,364v1.9h-.35v-3.65h.33v.8A1.29,1.29,0,0,1,130.46,362.39Z" fill="#231f20"/>
 
        <path d="M137.47,361.4a1.5,1.5,0,0,1,.53,1.22,1.48,1.48,0,0,1-.53,1.2,2.2,2.2,0,0,1-1.45.44h-1.4v1.6h-.35V361H136A2.2,2.2,0,0,1,137.47,361.4Zm-.25,2.2a1.39,1.39,0,0,0,0-2,1.84,1.84,0,0,0-1.2-.34h-1.4v2.65H136A1.9,1.9,0,0,0,137.22,363.6Z" fill="#231f20"/>
 
        <path d="M142.15,364.12H139a1.47,1.47,0,0,0,.22.76,1.35,1.35,0,0,0,.55.51,1.55,1.55,0,0,0,.78.19,1.76,1.76,0,0,0,.66-.13,1.48,1.48,0,0,0,.51-.38l.2.23a1.67,1.67,0,0,1-.6.44,2,2,0,0,1-.78.15,1.94,1.94,0,0,1-1-.24,1.61,1.61,0,0,1-.67-.65,1.93,1.93,0,0,1-.24-1,1.9,1.9,0,0,1,.23-1,1.71,1.71,0,0,1,.62-.66,1.73,1.73,0,0,1,.9-.24,1.67,1.67,0,0,1,.89.24,1.62,1.62,0,0,1,.62.65,1.88,1.88,0,0,1,.23.95Zm-2.42-1.46a1.44,1.44,0,0,0-.5.48,1.68,1.68,0,0,0-.21.71h2.8a1.6,1.6,0,0,0-.21-.7,1.38,1.38,0,0,0-.5-.49,1.44,1.44,0,0,0-.69-.17A1.41,1.41,0,0,0,139.73,362.66Z" fill="#231f20"/>
 
        <path d="M146.12,362.58a1.59,1.59,0,0,1,.4,1.15v2.13h-.35v-2.1a1.29,1.29,0,0,0-.32-.94,1.13,1.13,0,0,0-.87-.32,1.31,1.31,0,0,0-1,.38,1.42,1.42,0,0,0-.37,1v1.94h-.35v-3.65h.33V363a1.38,1.38,0,0,1,.57-.6,1.67,1.67,0,0,1,.88-.22A1.46,1.46,0,0,1,146.12,362.58Z" fill="#231f20"/>
 
        <path d="M151.25,362.21v3.26a1.8,1.8,0,0,1-.44,1.35,1.85,1.85,0,0,1-1.33.43,3,3,0,0,1-.95-.15,1.94,1.94,0,0,1-.72-.43l.19-.27a1.81,1.81,0,0,0,.66.39,2.21,2.21,0,0,0,.82.14,1.46,1.46,0,0,0,1.07-.34,1.43,1.43,0,0,0,.35-1.08v-.61a1.52,1.52,0,0,1-.62.61,1.79,1.79,0,0,1-.9.22,1.87,1.87,0,0,1-.92-.23,1.67,1.67,0,0,1-.66-.63,1.78,1.78,0,0,1-.24-.92,1.74,1.74,0,0,1,.24-.91,1.54,1.54,0,0,1,.66-.63,1.87,1.87,0,0,1,.92-.23,1.84,1.84,0,0,1,.91.23,1.42,1.42,0,0,1,.63.63v-.83Zm-1.07,3a1.35,1.35,0,0,0,.54-.52,1.6,1.6,0,0,0,0-1.51,1.42,1.42,0,0,0-.54-.52,1.62,1.62,0,0,0-.77-.18,1.58,1.58,0,0,0-.76.18,1.42,1.42,0,0,0-.54.52,1.6,1.6,0,0,0,0,1.51,1.35,1.35,0,0,0,.54.52,1.59,1.59,0,0,0,.76.19A1.63,1.63,0,0,0,150.18,365.23Z" fill="#231f20"/>
 
        <path d="M155.94,362.21v3.65h-.34v-.78a1.31,1.31,0,0,1-.54.6,1.64,1.64,0,0,1-.84.21,1.39,1.39,0,0,1-1.52-1.55v-2.13h.35v2.11a1.26,1.26,0,0,0,.31.93,1.18,1.18,0,0,0,.89.33,1.27,1.27,0,0,0,1-.39,1.45,1.45,0,0,0,.36-1v-2Z" fill="#231f20"/>
 
        <path d="M157.39,361.24a.29.29,0,0,1,0-.4.29.29,0,0,1,.21-.09.32.32,0,0,1,.2.08.3.3,0,0,1,.08.2.32.32,0,0,1-.08.21.32.32,0,0,1-.2.08A.32.32,0,0,1,157.39,361.24Zm0,1h.35v3.65h-.35Z" fill="#231f20"/>
 
        <path d="M162.12,362.58a1.59,1.59,0,0,1,.4,1.15v2.13h-.35v-2.1a1.33,1.33,0,0,0-.31-.94,1.15,1.15,0,0,0-.88-.32,1.32,1.32,0,0,0-1,.38,1.42,1.42,0,0,0-.37,1v1.94h-.35v-3.65h.33V363a1.38,1.38,0,0,1,.57-.6,1.67,1.67,0,0,1,.88-.22A1.46,1.46,0,0,1,162.12,362.58Z" fill="#231f20"/>
 
        <path d="M166.13,365.71a1.91,1.91,0,0,1-.76-.48l.16-.26a2,2,0,0,0,.7.44,2.39,2.39,0,0,0,.92.17,1.75,1.75,0,0,0,1.06-.26.82.82,0,0,0,.35-.7.75.75,0,0,0-.18-.52,1.35,1.35,0,0,0-.47-.3,7.75,7.75,0,0,0-.76-.22,6.12,6.12,0,0,1-.86-.26,1.29,1.29,0,0,1-.56-.39,1,1,0,0,1-.22-.7,1.2,1.2,0,0,1,.18-.65,1.33,1.33,0,0,1,.58-.48,2.48,2.48,0,0,1,1-.17,2.72,2.72,0,0,1,.8.12,2.25,2.25,0,0,1,.68.32l-.14.29a2.11,2.11,0,0,0-.64-.31,2.49,2.49,0,0,0-.7-.11,1.62,1.62,0,0,0-1,.28.85.85,0,0,0-.35.7.76.76,0,0,0,.19.53,1.27,1.27,0,0,0,.47.3,7.75,7.75,0,0,0,.76.22,7.84,7.84,0,0,1,.86.26,1.43,1.43,0,0,1,.55.38,1,1,0,0,1,.23.69,1.13,1.13,0,0,1-.19.65,1.28,1.28,0,0,1-.59.47,2.42,2.42,0,0,1-1,.18A2.77,2.77,0,0,1,166.13,365.71Z" fill="#231f20"/>
 
        <path d="M172.78,362.42a1.79,1.79,0,0,1,.65.66,2.12,2.12,0,0,1,0,1.92,1.79,1.79,0,0,1-.65.66,1.91,1.91,0,0,1-.93.23,1.62,1.62,0,0,1-.87-.23,1.54,1.54,0,0,1-.61-.63v2.19H170v-5h.34v.86a1.53,1.53,0,0,1,.61-.65,1.66,1.66,0,0,1,.88-.24A1.81,1.81,0,0,1,172.78,362.42Zm-.19,3a1.4,1.4,0,0,0,.53-.55,1.76,1.76,0,0,0,0-1.59,1.4,1.4,0,0,0-.53-.55,1.48,1.48,0,0,0-.76-.19,1.44,1.44,0,0,0-.75.19,1.32,1.32,0,0,0-.52.55,1.68,1.68,0,0,0,0,1.59,1.32,1.32,0,0,0,.52.55,1.45,1.45,0,0,0,.75.2A1.49,1.49,0,0,0,172.59,365.38Z" fill="#231f20"/>
 
        <path d="M175.24,365.65a1.68,1.68,0,0,1-.66-.66,2.1,2.1,0,0,1,0-1.91,1.74,1.74,0,0,1,.66-.66,1.94,1.94,0,0,1,1.87,0,1.79,1.79,0,0,1,.65.66,2,2,0,0,1,0,1.91,1.72,1.72,0,0,1-.65.66,1.94,1.94,0,0,1-1.87,0Zm1.69-.27a1.38,1.38,0,0,0,.52-.55,1.76,1.76,0,0,0,0-1.59,1.38,1.38,0,0,0-.52-.55,1.51,1.51,0,0,0-.76-.19,1.44,1.44,0,0,0-.75.19,1.32,1.32,0,0,0-.52.55,1.68,1.68,0,0,0,0,1.59,1.32,1.32,0,0,0,.52.55,1.45,1.45,0,0,0,.75.2A1.51,1.51,0,0,0,176.93,365.38Z" fill="#231f20"/>
 
        <path d="M182,362.58a1.59,1.59,0,0,1,.39,1.15v2.13H182v-2.1a1.29,1.29,0,0,0-.31-.94,1.14,1.14,0,0,0-.87-.32,1.31,1.31,0,0,0-1,.38,1.43,1.43,0,0,0-.38,1v1.94h-.35v-3.65h.34V363a1.36,1.36,0,0,1,.56-.6,1.7,1.7,0,0,1,.89-.22A1.46,1.46,0,0,1,182,362.58Z" fill="#231f20"/>
 
        <path d="M183.88,365.76a1.65,1.65,0,0,1-.62-.34l.16-.28a1.87,1.87,0,0,0,.58.32,2.24,2.24,0,0,0,.73.12,1.49,1.49,0,0,0,.82-.18.59.59,0,0,0,.26-.5.5.5,0,0,0-.14-.37.83.83,0,0,0-.36-.19,4.52,4.52,0,0,0-.58-.14,5,5,0,0,1-.7-.16,1.11,1.11,0,0,1-.45-.3.76.76,0,0,1-.19-.56.88.88,0,0,1,.36-.72,1.68,1.68,0,0,1,1-.28,2.35,2.35,0,0,1,.69.1,1.62,1.62,0,0,1,.56.26l-.16.28a1.73,1.73,0,0,0-.51-.25,2.33,2.33,0,0,0-.59-.08,1.27,1.27,0,0,0-.77.19.58.58,0,0,0-.26.49.5.5,0,0,0,.15.39.79.79,0,0,0,.36.2c.14,0,.34.09.6.14a7,7,0,0,1,.69.17,1.07,1.07,0,0,1,.44.28.77.77,0,0,1,.18.54.84.84,0,0,1-.38.73,1.79,1.79,0,0,1-1.06.27A2.63,2.63,0,0,1,183.88,365.76Z" fill="#231f20"/>
 
        <path d="M187.63,365.65A1.72,1.72,0,0,1,187,365a2,2,0,0,1,0-1.91,1.79,1.79,0,0,1,.65-.66,1.85,1.85,0,0,1,.94-.24,1.79,1.79,0,0,1,.93.24,1.74,1.74,0,0,1,.66.66,2,2,0,0,1,0,1.91,1.68,1.68,0,0,1-.66.66,1.79,1.79,0,0,1-.93.24A1.85,1.85,0,0,1,187.63,365.65Zm1.69-.27a1.4,1.4,0,0,0,.53-.55,1.76,1.76,0,0,0,0-1.59,1.4,1.4,0,0,0-.53-.55,1.58,1.58,0,0,0-1.5,0,1.34,1.34,0,0,0-.53.55,1.76,1.76,0,0,0,0,1.59,1.34,1.34,0,0,0,.53.55,1.51,1.51,0,0,0,1.5,0Z" fill="#231f20"/>
 
        <path d="M192.34,362.39a1.7,1.7,0,0,1,.87-.21v.34h-.08a1.21,1.21,0,0,0-1,.38,1.57,1.57,0,0,0-.34,1.06v1.9h-.35v-3.65h.34v.8A1.27,1.27,0,0,1,192.34,362.39Z" fill="#231f20"/>
 
        <path d="M194.29,365.76a1.73,1.73,0,0,1-.62-.34l.16-.28a1.87,1.87,0,0,0,.58.32,2.3,2.3,0,0,0,.74.12,1.43,1.43,0,0,0,.81-.18.57.57,0,0,0,.27-.5.47.47,0,0,0-.15-.37.79.79,0,0,0-.35-.19,4.52,4.52,0,0,0-.58-.14,5,5,0,0,1-.7-.16,1.08,1.08,0,0,1-.46-.3.81.81,0,0,1-.19-.56.86.86,0,0,1,.37-.72,1.67,1.67,0,0,1,1-.28,2.3,2.3,0,0,1,.69.1,1.53,1.53,0,0,1,.56.26l-.16.28a1.73,1.73,0,0,0-.51-.25,2.33,2.33,0,0,0-.59-.08,1.29,1.29,0,0,0-.77.19.58.58,0,0,0-.26.49.5.5,0,0,0,.15.39.91.91,0,0,0,.36.2c.14,0,.34.09.6.14a6.32,6.32,0,0,1,.69.17,1.07,1.07,0,0,1,.44.28.73.73,0,0,1,.19.54.87.87,0,0,1-.38.73,1.82,1.82,0,0,1-1.07.27A2.63,2.63,0,0,1,194.29,365.76Z" fill="#231f20"/>
 
        <rect y="317.34" width="297.64" height="37.27" fill="#00b1c5"/>
 
        <path d="M175.69,399.54a13.12,13.12,0,1,1,0-26.24,12.52,12.52,0,0,1,9,3.61l-2.53,2.53a9.12,9.12,0,0,0-6.46-2.56,9.54,9.54,0,0,0,0,19.07,8.75,8.75,0,0,0,6.62-2.62,7.47,7.47,0,0,0,2-4.51H176v-3.59h11.8a11.5,11.5,0,0,1,.2,2.24,11.85,11.85,0,0,1-3.11,8.39A12,12,0,0,1,175.69,399.54Z" fill="#557ebf"/>
 
        <path d="M206.9,391.1a8.45,8.45,0,1,1-8.45-8.45A8.34,8.34,0,0,1,206.9,391.1Zm-3.7,0a4.77,4.77,0,1,0-4.75,5.12A4.86,4.86,0,0,0,203.2,391.1Z" fill="#ea4535"/>
 
        <path d="M225.9,391.09a8.45,8.45,0,1,1-8.45-8.45A8.34,8.34,0,0,1,225.9,391.09Zm-3.7,0a4.77,4.77,0,1,0-4.75,5.12A4.86,4.86,0,0,0,222.2,391.09Z" fill="#f9bc15"/>
 
        <path d="M244,383.15v15.17c0,6.24-3.68,8.8-8,8.8a8,8,0,0,1-7.48-5l3.23-1.35a4.66,4.66,0,0,0,4.25,3c2.79,0,4.52-1.73,4.52-5v-1.21h-.13a5.77,5.77,0,0,1-4.45,1.92,8.47,8.47,0,0,1,0-16.9,5.86,5.86,0,0,1,4.45,1.89h.13v-1.38Zm-3.27,8c0-3-2-5.15-4.51-5.15s-4.51,2.18-4.51,5.15,2,5.09,4.51,5.09S240.68,394.07,240.68,391.12Z" fill="#557ebf"/>
 
        <path d="M250.66,374.21V399H247V374.21Z" fill="#36a852"/>
 
        <path d="M265.49,393.87l2.88,1.92a8.4,8.4,0,0,1-7,3.75,8.26,8.26,0,0,1-8.38-8.45c0-5,3.61-8.45,8-8.45s6.53,3.49,7.23,5.38l.39,1-11.3,4.67a4.3,4.3,0,0,0,4.1,2.56A4.82,4.82,0,0,0,265.49,393.87Zm-8.87-3,7.56-3.13a3.28,3.28,0,0,0-3.14-1.79A4.63,4.63,0,0,0,256.62,390.83Z" fill="#ea4535"/>
 
        <rect x="160.95" y="373.04" width="112" height="36" fill="none"/>
 
        <text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">Janua<tspan x="38.69" y="0" letter-spacing="0.02em">r</tspan>
 
            <tspan x="44.26" y="0">y 14 - 16 2022</tspan>
 
            <tspan x="44.26" y="0">y 14 - 16 2023</tspan>
 
        </text>
 
        <g id="Layer_2" data-name="Layer 2">
 
            <g id="emperor">
 
                <path d="M256.88,261.71a24.47,24.47,0,0,0,.69,2.7c.18.24,1.25,4.65,1.31,4.83s1.27,3.41,1.33,3.65.75,2.64.86,3.3.7,4.07.7,4.73.05,2.4.05,2.64v3.59a29.61,29.61,0,0,1-.11,3.65,28.94,28.94,0,0,1-.75,4,11.44,11.44,0,0,1-1.22,3.36c-.33.61-.63,1.2-.92,1.2a7.23,7.23,0,0,1-2-2.34c.34-2.76,1.55-4.62,1.84-8.51a85.54,85.54,0,0,0,0-8.63c-.15-2.46-1.14-12.94-1.32-13.3a15.43,15.43,0,0,1-.58-1.74A10.23,10.23,0,0,1,256.88,261.71Z" fill="#d2d3d4"/>
 
                <path d="M258.3,257.3s-.75,2.93-.75,3.42-.52.82-.23,2,1.15,4.32,1.38,5.1c.1.34.49,1.43.93,2.72.58,1.66,1.26,3.65,1.55,4.77.52,2,1.28,11.51.81,14.44s-1.55,9.18-2,10.08-.92,1-1.45.66a3.9,3.9,0,0,1-1.1-1.62,10.69,10.69,0,0,0-.75-1.32,10.24,10.24,0,0,0,.4-1.44c.12-.66.06.3.64,1.26s1.1,1.8,1.5,1.08a11.51,11.51,0,0,0,1.68-4.32c.06-1.56.87-3.78.81-6.65s-.23-8.21-.46-9.41a46.4,46.4,0,0,0-1.22-5.16c-.29-.53-2.26-7.6-2.42-8a9,9,0,0,1-.76-2.87c.12-.6,1-3.59,1-3.9A3.31,3.31,0,0,1,258.3,257.3Z" fill="#231f20"/>
 
                <path d="M246.39,245.73a33.05,33.05,0,0,1,4.59-.36c.44.18,2.69,1.62,2.69,1.62s2.69,2.87,2.86,4,.7,8.81.78,9.08a26.09,26.09,0,0,1-.43,2.6,13.09,13.09,0,0,0,0,2c.09.72.78,4.31.86,4.76s.61,3.87.7,4.31.35,3.87.35,4.23.34,3.59.34,3.86v4.77c0,.27-.52,4.41-.6,5.12s-1.82,6.11-1.74,6.38-2.69,6.2-2.69,6.83-1.55,2.6-2,3.05A24.68,24.68,0,0,1,247.6,310a16.91,16.91,0,0,1-4.33.54c-.61,0-7.73-.45-8.23-.45s-1.91-1-2.17-1.08-1-1.09-1.31-1.18a9.16,9.16,0,0,1-1.91-1.88,21.34,21.34,0,0,1-.61-2.07c-.17-.63-.69-4.14-.78-4.59s-.43-3.23-.6-3.77.17-6.29-.09-7.28,1.91-8.53,2.08-9.34,3.64-8.72,3.47-10.25.87-11.59.95-12.58,2.34-4.58,3.12-5.3S244.22,246.09,246.39,245.73Z" fill="#fff"/>
 
                <path d="M254.8,249.32s-2-2.33-1.48-1.7-1.47-.81-1.47-.81-.52.36-.6.09-.27.28-.44.63-.6-.63-.6-.63l-.44.62-.69-.43-.35,1.08-.69-.54.43,1.08h-.95l.61.62-1.22-.17.35,1.07-.87-.35.09.71-.78-.19.34.81h-.69l.26.39.27.42-.69-.28.61.81-.61-.09-.61-.28-1-1.78.86-3.14,2.69-1.71,2.88-.09,2,.27,2.69,2.34Z" fill="#6e6f72"/>
 
                <g clip-path="url(#clip-path)">
 
                    <g clip-path="url(#clip-path-2)">
 
                        <image width="111" height="129" transform="translate(243.01 246.45) scale(0.13)" xlink:href="data:image/png;base64,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" style="isolation:isolate"/>
 
                    </g>
 
                </g>
 
                <path d="M228.52,288.06a34.68,34.68,0,0,0-.4,6.17c.23,1.86.4,4.25.46,4.67s.06,2,.12,2.58a27.83,27.83,0,0,0,.63,3.36,6.45,6.45,0,0,0,2,2.7,9.68,9.68,0,0,1,1.12.91c.49.45.78.79,1,.82l2,.44a3.13,3.13,0,0,1-1.8-.07,18.61,18.61,0,0,1-4-3.42c-.58-.9-1.11-4.26-1.22-5.16s-1.33-4.91-1.45-5.93a23.74,23.74,0,0,1-.11-4C227,290.53,227.77,289.91,228.52,288.06Z" fill="#231f20"/>
 
                <path d="M253.79,277.25c0,.14.39.28.61,0a11.94,11.94,0,0,0,1.3-3.55,16,16,0,0,0-.35-5.76,12.17,12.17,0,0,1-.17-3.19c.08-.45,2-3.91,2.25-4.45a16.2,16.2,0,0,0,.87-3.06c0-.12,0-.33.05-.61a9.72,9.72,0,0,0-.44-3.75,22.49,22.49,0,0,0-2.56-4.76c-.35-.35-1.56-1.22-1.86-1.62a5.3,5.3,0,0,0-2.74-1.35,4.8,4.8,0,0,0-1.6.09c-.3.05-.52,0,1.46.48a6,6,0,0,1,3.93,3.19,13,13,0,0,1,.59,2.9c.13.63.1,3.93-1.89,5.64a4.53,4.53,0,0,1-2.52,1.53c-.55,0-2-1.24-2.65-1.29-.36,0-.65.18-.83.72a2.77,2.77,0,0,0,.35,1.8c.09.17.25.58.41,1,.09.24.18.49.28.71.27.5-.83.16-1.68-.46a7,7,0,0,1-1.56-1.89,3.76,3.76,0,0,0,1.6,2.34,12.88,12.88,0,0,1,3.86,3.42,31.08,31.08,0,0,1,2.91,5.08,6.5,6.5,0,0,1,.65,1.84,10.9,10.9,0,0,1,0,2C254.05,275,253.88,276.08,253.79,277.25Z" fill="#231f20"/>
 
                <path d="M251.7,264.58s1.66,2.48,1.86,3a15.91,15.91,0,0,1,1.22,3.28,9.51,9.51,0,0,1,0,3.1c-.24,1.14-.35.95-.35.95a11.46,11.46,0,0,0-.43-3.78c-.48-1.44-1.3-2.88-1.57-3.55S251.32,264.53,251.7,264.58Z" fill="#f15b2b"/>
 
                <path d="M251.92,262c.08-.14.09-.45.4-.22s.55.36.6.76,0,.68-.13.77-.69-.18-.82-.32A1.51,1.51,0,0,1,251.92,262Z" fill="#595a5c"/>
 
                <path d="M252.36,262.28a.83.83,0,0,1,.26.36c0,.18,0,.45-.09.41a.66.66,0,0,1-.39-.36,2.28,2.28,0,0,1,0-.45S252.27,262.15,252.36,262.28Z" fill="#231f20"/>
 
                <path d="M251.94,245.62s.31.52-.51.36a7.47,7.47,0,0,0-3.65.12,2.87,2.87,0,0,0-1.73,2.64c-.12,1.68-1,1.38-1.5,2.34-.24.48,1.1,3.17,1.1,3.17s-2.78-3.06-5.73-2.51c-.94.17-3.18,1.55-4.63,5.33-.57,1.48-1.1,8.51-1.1,9.11s-.35,5.63-1.33,8c-.24.55-3,9.1-3.7,11.75s-2.55,8.62-2.9,9.35a15,15,0,0,1-1.61,3.11c-.46.36.23,1-.47.36s-.81-2.88-.69-3.72.7-4.31.81-5-.34-2.87,0-4.67.06-5.27,1-8.45c1.37-4.5,4.1-6,5-9.35a94.93,94.93,0,0,0,1.56-9.71,20.9,20.9,0,0,1,4.16-8.57c1.85-2.28,3.35-4.2,5.09-4.44a14,14,0,0,1,4-.06c.92.12,2.6.12,3.75.18A5.4,5.4,0,0,1,251.94,245.62Z" fill="#424143"/>
 
                <path d="M244.6,254.91c.35.36,1,1.5,1.56,1.26.69-.32-.28-1.74-.7-2.34a6.55,6.55,0,0,0-2-1.68c-.46-.17-2.37-1-3.41-.59a6.12,6.12,0,0,0-2.83,1.73,9.6,9.6,0,0,0-2.32,3.54,30.41,30.41,0,0,0-.86,5.93c0,1.14-.28,5-.37,5.8s-.55,4.63-.55,4.87a15.79,15.79,0,0,0,1.22-4c.18-1.31.34-3.66.4-5a30.14,30.14,0,0,1,.64-5.27,9.39,9.39,0,0,1,1.85-4.26c1.27-1.38,1.89-1.66,2.54-1.74a5.16,5.16,0,0,1,3.18.6A4.26,4.26,0,0,1,244.6,254.91Z" fill="#231f20"/>
 
                <path d="M253.16,306.82s.25-.21,1.27.24a2.94,2.94,0,0,1,1.79,1.43,16.66,16.66,0,0,1,.58,1.68,15,15,0,0,1,.27,1.74c0,.6-.3,1.38-.4,1.08s-.29-.78-.64-.9c-.62-.21-.57-.72-.86-1s.17.24-.06,1-.35.66-.58.9-.35.6-.75.66-.17-.12-.12-.66-.34-1.93-.34-1.26a2.9,2.9,0,0,1-.64,1.08,1.18,1.18,0,0,1-.92.36s-.41.66-.76.72,0-.06-.17-.83.12-1.2-.52-1.68.58,0-.63,0-3.13-.18-3.36-.77,3.36-.72,4.57-1.74,2.25-2.1,2.25-2.1" fill="#424143"/>
 
                <path d="M256.83,264.75c.31,2.71,1.18,5.37,1.47,8.1.32,3,.55,6,.7,9a35.82,35.82,0,0,1-.55,9.81,83.21,83.21,0,0,1-3.57,11.12c-.8,2.05-1.49,3.91-3.42,5.14a15.76,15.76,0,0,1-8.45,2.25,1.27,1.27,0,0,0,0,.67,16.07,16.07,0,0,0,8.09-2c1.91-1.11,2.65-2.56,3.46-4.53a75.82,75.82,0,0,0,3.76-11.38,32.86,32.86,0,0,0,.85-8.95c-.13-3.14-.21-6.28-.57-9.4-.17-1.46-.31-2.92-.55-4.37-.34-2-.94-4-1.17-5.95,0-.26-.06.38-.05.48Z" fill="#231f20"/>
 
                <path d="M232.78,308.9c-.55-.29-.35,1.26.72,2.23a5.42,5.42,0,0,0,3.24,1.2,2.71,2.71,0,0,1,1.79.6c.58.36,1.21.3,1.33.66s.63-.66.35-1.14-.35-.78-.53-.84.64,1,1.11,1.26,1.15.55,1.38.42.63-.48.86,0,.41-.12.38-.51a.55.55,0,0,0-.14-.33,9.24,9.24,0,0,1-.87-.9,10.69,10.69,0,0,1,2,1.2c.18.3.29-.6.18-1.08s-.53-.71-.87-1-1-1.43-1.74-1.67-1.38-.09-1.67-.24a5.26,5.26,0,0,0-4.11.24A3.3,3.3,0,0,1,232.78,308.9Z" fill="#424143"/>
 
                <path d="M240,312.21a4.18,4.18,0,0,0-.55-1,2.32,2.32,0,0,0-.78-.48l-.67-.12c-.05,0-.27-.06-.4-.09a.49.49,0,0,1-.35-.36,1,1,0,0,0,.55.24,4.57,4.57,0,0,1,1.33.28A2,2,0,0,1,240,312.21Z" fill="#231f20"/>
 
                <path d="M240,309.78l.67.23.32.07c.34.06,1.07.14,1.21.57a6.12,6.12,0,0,0,.35.93c-.44-.39-.35-.66-.55-.83a2.89,2.89,0,0,0-1.13-.45C240.52,310.19,240.15,309.84,240,309.78Z" fill="#231f20"/>
 
                <path d="M253.75,308.85a2.06,2.06,0,0,1,1.08.72,3.52,3.52,0,0,1,.24.9,1.54,1.54,0,0,1,.09.6,2.8,2.8,0,0,0-.06-1.41C254.65,308.9,254.05,309,253.75,308.85Z" fill="#231f20"/>
 
                <path d="M252.13,309.75s.9,0,1.08.36a1.51,1.51,0,0,1,.13,1.68c-.31.59.24-.81-.21-1.35A3.38,3.38,0,0,0,252.13,309.75Z" fill="#231f20"/>
 
            </g>
 
            <g id="king">
 
                <path d="M262.32,284.2s.69,5.49.78,5.93-.05,3.2-.05,3.46-.39,3-.39,3-.52,2-.6,2.21a4.82,4.82,0,0,1-1.43,1.08c-.18,0-1.25.39-1.56-.17s-1.6-1.73-1.65-2.6a18,18,0,0,1,.52-3.72c.12-.35,1.21-3,1.29-3.29s1-2.94,1.17-3.2,1.21-2.94,1.3-3.24,0-1.78,0-1.95A24.25,24.25,0,0,1,262.32,284.2Z" fill="#e6e7e7"/>
 
                <path d="M262,277s-.69,5.31-.8,6.12-1.73,4.84-2,6a7.08,7.08,0,0,1-.36,1.07c-.06.17-.14.34-.21.51s-.12.28-.18.43a25.66,25.66,0,0,0-1.44,4.21,6.92,6.92,0,0,0,1.13,5.17c.72,1.07,1.13,1.51,1.47,1.43a5.63,5.63,0,0,0,2.25-2.33c.15-.27.65-1.93.69-2.07a14.86,14.86,0,0,0,.23-2.66s-.62,3.42-1.48,3.77-.77-.83-.92-1.82a19.28,19.28,0,0,0-.55-2.21,5.05,5.05,0,0,0-.52,1.3,2.16,2.16,0,0,1-.43.91l-.3-.17-.55.65a4.4,4.4,0,0,1-.09-2,16.53,16.53,0,0,1,1.3-4.11c.19-.43,2.3-4.93,2.76-5.28s-.13-1.49,0-1.84S261.93,277.35,262,277Z" fill="#020202"/>
 
                <path d="M280.79,306.48a1.89,1.89,0,0,0,0,1.08,5.86,5.86,0,0,1,.13,1.77,2.11,2.11,0,0,1-.65,1.52,2.41,2.41,0,0,1-1.3.65c-.43,0-1,.64-1.43.77s-.34.44-.65.48a1.74,1.74,0,0,0-.86.65c0,.09-.12-.23,0-.65a2.6,2.6,0,0,1,.34-.83,2.12,2.12,0,0,1,.39-.55,3.77,3.77,0,0,0-1,.78,2,2,0,0,1-1.51.78,2.94,2.94,0,0,0-1.18.09,2.57,2.57,0,0,0-1.16.77,3.94,3.94,0,0,1,.34-1.38,3.61,3.61,0,0,1,.95-1c.35-.3-.51.39-.69.55a1.62,1.62,0,0,1-.65.26,1.77,1.77,0,0,0,.48-.78,1.34,1.34,0,0,1,.65-1,13,13,0,0,1,1.82-.61,3.45,3.45,0,0,0,1.68-1.65c.26-.65.13-1.66.3-1.86a2.81,2.81,0,0,1,1.43-.61c.35,0,1.78-.13,1.94.09A7.58,7.58,0,0,0,280.79,306.48Z" fill="#818285"/>
 
                <path d="M272.27,312.27a1.73,1.73,0,0,1-1,.4,4.79,4.79,0,0,0-1.55.55c-.47.25-1.38.86-1.38,1.08s.3-1.38.65-1.51.69-.09.86-.55a2.85,2.85,0,0,1,.48-.87,2.59,2.59,0,0,0-1.38.78,4.12,4.12,0,0,1-1.26.83,5.14,5.14,0,0,0-1.12.51,4.37,4.37,0,0,0-.61.74c-.08.13-.39-.3-.13-.78a3.28,3.28,0,0,1,.48-.69,1.39,1.39,0,0,1,.26-.95c.35-.52-.26.43-.43.47a3,3,0,0,0-1.13.55c-.62.52-.52.09-.83.18a3.25,3.25,0,0,0-.9.52,1.29,1.29,0,0,1,.21-1.3c.44-.3.22.09.56-.22s.3-1.17,1.3-1.34a3.49,3.49,0,0,0,1.42-.52c.44-.3,1.43-.6,1.69-.83a1.26,1.26,0,0,0,.39-1.12c0-.52-.35-1.82-.35-1.82l1.26-.39a2.76,2.76,0,0,1,1.38-.21c.3.13,1.56-.55,1.56-.55a9.66,9.66,0,0,0,.08,1.42c.05.31.26.61.05,1a1.37,1.37,0,0,0-.22.83,3.38,3.38,0,0,0,.43,1c.39.83.2.53.35.65Z" fill="#818285"/>
 
                <path d="M268.81,306.56c0,.18-.39.22-.26.56.06.14-.39-.44-.39-.44l-.39-.08s-.08.39-.17-.55a4.82,4.82,0,0,0-.78-2.17c-.34-.55-1.17-1.29-1.81-2.12a14.49,14.49,0,0,1-2.08-2.89,12.71,12.71,0,0,1-.74-3.9,44.32,44.32,0,0,1,.43-4.63c.08-1.47-.87-8-.87-8.61a14.35,14.35,0,0,1,.22-3.59,28.28,28.28,0,0,1,2.51-6.92c1.21-2.07,3.55-5.45,3.72-5.88a24.78,24.78,0,0,0,1.08-2.76,10.39,10.39,0,0,0,.22-1.56,18.64,18.64,0,0,0,2.12,3.46c.82.74,5.62,4.37,6,5.15a27.69,27.69,0,0,1,.65,5.19c0,.65.47,4.2,1.08,4.89a32.87,32.87,0,0,1,2.55,4.07,22.44,22.44,0,0,1,1.21,2.81c.13.52,1.17,4.67,1.26,5.15a22.13,22.13,0,0,1,.38,2.42,21.61,21.61,0,0,1-.9,4.37c-.61,2-1.86,6.1-3,7.79-.47.68-.48-.17-.48-.17l-.47.3-.35-.39s-.17.52-.26.34.09-.47-.08-.17-.39.7-.48.3,0-.51-.09-.38-.17.55-.3.3-.23,0-.39-.05a2.57,2.57,0,0,0-.83.05l-.17,0a3.38,3.38,0,0,1-.34-.62c-.13-.3-.09-1.09-.17-1.34s-.83.9-1.47,1a4.72,4.72,0,0,1-2-.13c-1.44-.21-.44-.17-.35,0l.08.18a2,2,0,0,1-.6.38,1.93,1.93,0,0,1-1,.13c-.26,0-.55-.08-.74.05s-.3-.13-.47.08-.26.26-.39.22.13-.26-.13,0A.79.79,0,0,1,268.81,306.56Z" fill="#fff"/>
 
                <path d="M269.58,261.14s2.51.3,3.64-.3,1.38-.52,1.51-1.3-.91-2.16-.26-2.94,1.26-.74,1.69-.44,1.21.91,1.17,1.61a3,3,0,0,1-.48,1.9,6.36,6.36,0,0,1-2,1.38,8.12,8.12,0,0,1-2.17.86A4.81,4.81,0,0,1,269.58,261.14Z" fill="#f15b2b"/>
 
                <path d="M259.51,254.74s.43-.87,2-.52c.39.08,2.73.39,3,.39a18.89,18.89,0,0,1,3.29.83c.39.22,1.82.82,1.3,1.73a1.5,1.5,0,0,1-1.91.17,7.3,7.3,0,0,0-.95-.61,23.75,23.75,0,0,0-2.85-1.56A9.29,9.29,0,0,0,259.51,254.74Z" fill="#f15b2b"/>
 
                <g clip-path="url(#clip-path-3)">
 
                    <g clip-path="url(#clip-path-4)">
 
                        <g clip-path="url(#clip-path-4)">
 
                            <image width="82" height="63" transform="translate(265.79 260.49) scale(0.13)" xlink:href="data:image/png;base64,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" style="isolation:isolate"/>
 
                        </g>
 
                    </g>
 
                </g>
 
                <path d="M270.23,261.31a7.19,7.19,0,0,0,2.23.11,3.78,3.78,0,0,0,1.8-1,1.36,1.36,0,0,0,.55-1.34c-.14-.65-.43-1.43-.43-1.73s.3-1,.69-1.13.74-.26,1.17,0a7.65,7.65,0,0,1,1,1s.26-1.26-2-2.47a3.72,3.72,0,0,0-2.73-.43,6.3,6.3,0,0,0-1.86.48,2.25,2.25,0,0,1-1.38.08c-.48-.13-2-.26-3.25-.52a26.94,26.94,0,0,0-5.1-.78,1.67,1.67,0,0,0-1.69,1c-.26.82.61-.35,1.66-.35.66,0,2.56.3,3.16.39a23.24,23.24,0,0,1,3.17.77c.61.22,1.52.44,1.78.91a.53.53,0,0,1-.26.83,1.35,1.35,0,0,1-1.25,0c-.55-.24-2.64-1.51-2.64-1.51a16.71,16.71,0,0,1,2.68,2.16c.26.51.86.91,1,1.17l1,1.93A1.11,1.11,0,0,0,270.23,261.31Z" fill="#231f20"/>
 
                <path d="M259.11,255a2.43,2.43,0,0,1,1-.17,12.42,12.42,0,0,1,2.42.3,4.81,4.81,0,0,1,1,.26l.87.35a16.7,16.7,0,0,1,1.7,1,13.48,13.48,0,0,1,1.47,1.25l-.09-.73a17.55,17.55,0,0,0-3.5-2,10.5,10.5,0,0,0-3.12-.83C260.68,254.43,259,254.43,259.11,255Z" fill="#231f20"/>
 
                <path d="M269.39,261.05a15.4,15.4,0,0,0,2.29.83,4.5,4.5,0,0,0,2.08-.32c.47-.26,1.12-.61,1.51-.78a4.94,4.94,0,0,0,1.52-1,5.94,5.94,0,0,0,.52-1c.1-.46.17-.26.17-.26s.43.21.32,1.06a15.3,15.3,0,0,0-.17,2,7.91,7.91,0,0,0,.71,2.31c.31.43,1.78,2.07,2.08,2.52a9.84,9.84,0,0,1,1,2c.17.56.17,1.69.35,2.25a9.57,9.57,0,0,0,1.21,2.25,11.88,11.88,0,0,1,2.12,3.42c.34,1.26,1.45,4,1.45,4.39s.52,3.55.52,4.24-.26,6.88-.26,7.45.84,5.75.88,6,.22.38.09.6-.32,2.4-.71,1.84a26.42,26.42,0,0,1-2.34-4c-.26-.87-1.1-5-1.28-6s-.08-3.42-.47-4.24-1.52-4-1.82-4.33-2.57-2.3-2.86-3.24c-.95-3.12-.55-6.45-.73-7.66s-2.16-3.55-2.45-3.81-1.74-1.46-2.21-1.78c-1.38-.95-1.47-1.29-2.55-3.29-.49-.85-1.31.28-1.31.28l.26-1.32Z" fill="#595a5c"/>
 
                <path d="M269.39,261.22c1.92.83,3.23,1.07,5.16.07a6.71,6.71,0,0,0,2.24-1.35c.21-.25.4-1.16.69-1.29s.22,1.49.19,1.78a5.94,5.94,0,0,0,.57,3.44c.86,1.6,2.46,2.63,3.12,4.41.32.88.2,1.85.52,2.73a7.93,7.93,0,0,0,1.18,2.08,18.22,18.22,0,0,1,1.63,2.35,21,21,0,0,1,1.1,3,25.73,25.73,0,0,1,1.17,9.9,36.81,36.81,0,0,0,.34,7.42,13.83,13.83,0,0,1,.42,3.49,3,3,0,0,1-.24,1.1c-.32.53-.14.38-.55,0a10,10,0,0,1-1.54-2.46,17.22,17.22,0,0,1-1.48-5.15c-.37-1.85-.36-3.72-.68-5.56a20,20,0,0,0-1.63-4.35c-.62-1.39-2.08-2.14-2.93-3.4-1.59-2.39-.52-5.59-1-8.23a8.34,8.34,0,0,0-2.75-4c-.79-.68-1.65-1.27-2.46-1.93a10.35,10.35,0,0,1-1.92-2.7c-.29-.43-.4-.66-.94-.4-.1.05-.69.49-.45.7a11,11,0,0,1,.3-1.72c0-.05,0-.36,0-.23-.06.58-.19,1.15-.3,1.72,0,.11,0,.21,0,.31.81-1,1.31-.22,1.79.65a6.09,6.09,0,0,0,1.24,1.73c1.06,1,2.35,1.66,3.34,2.73a12.19,12.19,0,0,1,1.62,2.21,7.16,7.16,0,0,1,.59,3.64c0,1.81,0,4.17.93,5.77.72,1.21,2.12,1.91,2.81,3.11A22.31,22.31,0,0,1,283.1,287c.5,1.58.28,3.42.59,5.05s.57,3.23,1,4.77a8.47,8.47,0,0,0,.92,1.89c.3.53.83,1.84,1.38,2.19.36.22.23.22.47-.19a5.06,5.06,0,0,0,.34-1.55,6.73,6.73,0,0,0-.25-1.93c-.24-1.54-.58-3.11-.69-4.66-.18-2.54.3-5.12.24-7.66a24.75,24.75,0,0,0-1.61-7.62,12.75,12.75,0,0,0-1.27-2.94c-.41-.63-.91-1.19-1.34-1.79-1.31-1.81-1.05-4-2.17-5.84-1-1.63-2.6-2.68-3-4.63-.26-1.37.43-2.63-.3-3.81h0c-.17.07-.22.5-.28.64a2.67,2.67,0,0,1-1.06,1.24,13.29,13.29,0,0,1-2.63,1.34c-1.47.53-2.76,0-4.09-.61C269.4,260.89,269.33,261.19,269.39,261.22Z" fill="#231f20"/>
 
                <path d="M277.09,256.6s.76.52.71,2.64c-.15-.39-.32-.37-.39-.33a2.06,2.06,0,0,1-.8,1.08,3.21,3.21,0,0,0,.63-1.93,3.82,3.82,0,0,0-.47-1.27S277.05,257,277.09,256.6Z" fill="#231f20"/>
 
                <path d="M280,276.46c-.22-.67.69,2.33.78,3.11s.33,1.67.41,2.76a27.83,27.83,0,0,0,1.93,5.9c.28.46.44,4.76.7,5.45s.6,3.64.95,4.16a19.71,19.71,0,0,0,2.33,3c.26,0-.86-1.56-1.38-2.59a40.87,40.87,0,0,1-1.55-5.37c-.18-.78-.43-5.79-.69-6.49s-1.56-3.29-1.73-4S280.18,277,280,276.46Z" fill="#231f20"/>
 
                <path d="M269.41,304c.51.38.95.88,1.46,1.24.74.52,1.46.31,2.28.51a2.77,2.77,0,0,0,1.82.09c.55-.22,1-.72,1.54-1v-.65c-.48.54,0,2.05.2,2.56h0a3,3,0,0,1,.78-.22c.22,0,.61.33.64.33s.25-.08.28-.08c-.58,0,.79-.28.37-.08l.16,0c.28-.08.19-.14.44-.17,0,0,.15.16.19.16s.25-.12.39-.09.2.25.3.26c-.09,0,.62-.13.47,0,.28-.17.3-.6.43-.89a25.2,25.2,0,0,0,2-5c.23-1.07.65-2.1.93-3.15a15.45,15.45,0,0,0,.3-2.54c0-.1,0-.73-.05-.47a16.42,16.42,0,0,1-.63,3.55c-.24.76-.46,1.51-.63,2.29a16.49,16.49,0,0,1-1.17,3.09c-.24.55-.55,1.07-.83,1.61a3.73,3.73,0,0,0-.16.35c-.19.39-.09.49-.46.39h0c-.24.31-.25,0-.55-.1a.62.62,0,0,0-.28.14.75.75,0,0,1-.36-.3c-.46.07-.27.42-.78.16h0c-.28.46-.35.37-.5,0h0c-.22.06-.4-.05-.62,0s-.44.19-.55.16c-.28-.08-.51-1-.34-1.21s0-.65,0-.66c-.55.25-1,.74-1.54,1a2.69,2.69,0,0,1-1.81-.09c-.83-.19-1.55,0-2.28-.51-.52-.36-.95-.86-1.46-1.25.06.05-.14.56,0,.67Z" fill="#231f20"/>
 
                <path d="M268.64,306.78c0,.34.11.67.16,1,.14,1.18-.28,1.35-1.16,1.79a11.16,11.16,0,0,1-1.75.83,2.29,2.29,0,0,0-1.49.79s-.19.41-.26.49-.35.17-.53.34a1.4,1.4,0,0,0-.47.93,1,1,0,0,0,.17.8h0c.4-.6.91-.49,1.54-.67a10.37,10.37,0,0,0,1.53-.76c.06,0,0-.32,0-.33a8,8,0,0,1-2.06.89c-.18,0-.66.21-.81.22a1.2,1.2,0,0,0-.13.21l-.11-.51c.15-.54.55-.44.86-.7h0a1.48,1.48,0,0,1,.49-.82c.55-.52,1.27-.48,1.93-.77.87-.38,2.21-.8,2.34-1.86a10.91,10.91,0,0,0-.23-2.05c0-.21,0,.11,0,.16Z" fill="#231f20"/>
 
                <path d="M269.93,309a4.4,4.4,0,0,0-2.05,1.27c-.51.54-1.24.93-1.46,1.66-.11.34,0,.78-.24,1.08-.1.13-.3.2-.37.31a.77.77,0,0,0-.1.25c-.07.28.06.74.33.83v-.05c.08-.83,1.62-1.19,2.27-1.5a3.7,3.7,0,0,0,.95-.76,6.1,6.1,0,0,1,1.14-.72c.06,0,0-.32,0-.33a29.51,29.51,0,0,1-2.62,1.72,6.33,6.33,0,0,0-1.32.61,4.29,4.29,0,0,0-.45.69c-.46,0,.16-.75.23-.92.14-.35.08-.79.24-1.14a2.34,2.34,0,0,1,.75-.75c.5-.41.86-1,1.38-1.37a4.67,4.67,0,0,1,1.3-.55c.05,0,0-.33,0-.33Z" fill="#231f20"/>
 
                <path d="M273,305.5a1,1,0,0,1-.69,0h0c-.31.41-.3.83-.3.22,0,0,0-.33,0-.33-.27.28-.35.79-.65.05h0s-.31.2-.15.21-.47.21-.27.11c.41-.2-.46-.08-.19-.07-.14,0-.45.55-.46,0a1,1,0,0,0-.05-.24s-.38,1-.46.41c0,0,0-.13,0-.08-.25.51-.48.51-.78.15,0,0,0,0,0,.05-.05.23,0,.46-.18.13h-.1c-.45,1.08-1.36-2.13-1.69-2.52a38.29,38.29,0,0,1-3.64-4.4c-1.81-3.06-.43-6.92-.59-10.27-.18-3.56-1.38-7-.64-10.57a28.22,28.22,0,0,1,3.31-8.11c.81-1.43,1.77-2.65,2.69-4a9.73,9.73,0,0,0,1.2-3.31c.09-.35.49-1.48.28-1.84,0-.08.11-.49,0-.64h0s0,0,0,0c-.47,2.17-.63,4.1-2.07,5.88a25.52,25.52,0,0,0-2.2,3.42,28.5,28.5,0,0,0-3.28,8.33c-.57,2.9-.09,5.63.42,8.46a24.51,24.51,0,0,1,0,6.79,12.28,12.28,0,0,0,0,3.73,9.89,9.89,0,0,0,.75,2.54,19.8,19.8,0,0,0,1.86,2.48c.6.83,1.56,1.52,2.11,2.38s.31,1.9.87,2.61h0c.28-.07.25,0,.49.08,0,0,0,0,0-.05.17-.31.28-.35.32-.14,0,0,0,0,0,0,.11-.55.11-.09.27-.17-.19.11.65,0,.37,0s.37-.31.24-.27.23.3.25.3h0a2.16,2.16,0,0,0,.21-.71c.06,0,0,.4.06.41s.36-.15.46-.13.19.13.4.25h0c.21-.48.28-.27.57.05h0c.09-.23,0-.28.29-.55l0-.34c0-.4-.06.16,0,.25.07.26,0,.33.25.5h0c.13-.32.52-.21.85-.27.09,0,0-.67,0-.67Z" fill="#231f20"/>
 
                <path d="M273.48,310.08c-.11-.27-.21-.55-.34-.82a5.58,5.58,0,0,1-.34-.56c-.23-.6.07-.67.18-1.1a1.09,1.09,0,0,0,0-.4,2.66,2.66,0,0,0,0-.28c0-.15-.35-1.7-.17-1.23,0-.05.05-.23,0-.32a.05.05,0,0,0,0-.06h0a2.43,2.43,0,0,0,0,1c0,.2.09.37.12.55a3.56,3.56,0,0,1-.19,1.21c-.11.83.5,1.54.81,2.28,0-.05,0-.24,0-.32Z" fill="#231f20"/>
 
                <path d="M273.48,310.41a.92.92,0,0,0,0-.33A.62.62,0,0,0,273.48,310.41Z" fill="#231f20"/>
 
                <path d="M271.45,310.16c-1.11.32-1.18,1.38-1.77,2.19-.25.35-.55.21-.83.51a3.1,3.1,0,0,0-.52,1.35c0,.06,0,.27,0,.3a3,3,0,0,1,2.23-1.38,15.51,15.51,0,0,0,1.91-.86c.06,0,0-.32,0-.33a12.18,12.18,0,0,1-2.1.9,3,3,0,0,0-1.52.66,2,2,0,0,0-.27.31s-.48.71-.25.66c0,0,.22-.74.26-.83a1.32,1.32,0,0,1,.49-.65c.33-.16.41,0,.64-.38.52-.8.67-1.81,1.71-2.11.05,0,0-.33,0-.33Z" fill="#231f20"/>
 
                <path d="M276.71,306.81a3.09,3.09,0,0,1-1.51,2.73c-.59.34-1.38.36-2,.66a1.35,1.35,0,0,0-.79.86,7,7,0,0,1,0,.92v.32c.53-1.07,1.63-1.12,2.63-1.43a3.46,3.46,0,0,0,2.17-1.77c0-.08,0-.27,0-.32a3.76,3.76,0,0,1-2.8,1.91,2.7,2.7,0,0,0-2,1.29c0,.07,0,.31,0,.33.16-.16,0-.46,0-.65.15-1.42,1.62-1.25,2.6-1.74a3.33,3.33,0,0,0,1.66-3.34c0-.13,0,.19,0,.23Z" fill="#231f20"/>
 
                <path d="M280.69,306.42c-.17,1.41.6,3.53-.68,4.45-.73.52-1.64.57-2.34,1.15a5.55,5.55,0,0,1-.95.54c-.2.11-.49.6-.69.63s-.1.22,0-.31a1.44,1.44,0,0,1,.15-.61,10,10,0,0,1,1.38-1.38c.49-.46.86-.75.75-1.48a.76.76,0,0,0,0,.26c.1.85-1.36,1.25-1.92,1.74a4.48,4.48,0,0,1-1.49,1.15c-.83.3-1.86,0-2.5.64,0,0-.4.59-.41.59-.51-.09.44-1.42.53-1.52s0-.27,0-.33a2.5,2.5,0,0,0-.57,2.21h0c.8-1.45,2.61-.9,3.89-1.84a14.09,14.09,0,0,1,1.38-1.18c.41-.24.91-.38,1.14-.81,0-.06-.08-.58,0-.43-.09-.18.3-.2-.19.14a11.87,11.87,0,0,0-1.6,1.57,2.22,2.22,0,0,0-.71,1.92l0,.16a10.9,10.9,0,0,1,1.73-1.26,3.93,3.93,0,0,1,1.1-.69,5.23,5.23,0,0,0,1.54-.69c1.2-1.1.34-3.14.48-4.41,0-.05,0-.37,0-.24Z" fill="#231f20"/>
 
                <path d="M271.53,256.86c.06-.12.25-.16.55-.13a1.09,1.09,0,0,1,.56.15,1.42,1.42,0,0,1,.55.45c.15.23.09.26.06.44s-.27.27-.69.19a1.19,1.19,0,0,1-.65-.37A.89.89,0,0,1,271.53,256.86Z" fill="#939598"/>
 
                <path d="M272.07,257.07a.85.85,0,0,1,.44.09,1,1,0,0,1,.23.28.12.12,0,0,1,0,.17.11.11,0,0,1-.1,0,.71.71,0,0,1-.55-.35C272,257.18,271.94,257.09,272.07,257.07Z" fill="#231f20"/>
 
            </g>
 
            <g id="topknot">
 
                <path d="M217.46,312.81a5.36,5.36,0,0,1-.72,1.8c-.42.47-.77.6-1,1.26s-.66.65-.56,1.43,0,1.08.12,1.2.6-.12.9-.55.06-.72.6-1.2.66-.67,1-.28a2.08,2.08,0,0,1,.48,1.38c.06.72-.06,1.25.24,1.44s.12.89.42.47.12-.66.42-1.13.72-.36.66-1.26-.36-1.08-.12-1a2.07,2.07,0,0,1,.78.3c.6.3.48.42.9.36s.6,0,.36-.36.18-.24-.42-.6a2.29,2.29,0,0,1-1.2-1.26,2.88,2.88,0,0,1-.3-2.26C220.16,311.92,217.46,312.81,217.46,312.81Z" fill="#d17f58"/>
 
                <path d="M231,314.13a3.45,3.45,0,0,1-.83,1.5c-.4.3.12-.48-.42.29s-.36-.17-.55.79-.72,1.31.12.82.55.06,1.44-.48,1-1,1-1-.48-.12-.12.6-.06.48.48.83.3-.12.66.3.59.66.55.18-.06-.66.12-.78.66-.18.55-.48-.66-.06.12.3a4.45,4.45,0,0,0,1.32.48c.54.12.78-.24,1,.24l.24.48s.78-.54.54-1.26,0-1.08-1-1.26-1.14-.06-1.62-.66a7.7,7.7,0,0,1-.9-1.67,15.19,15.19,0,0,0-1.92-.24A5.23,5.23,0,0,0,231,314.13Z" fill="#d17f58"/>
 
                <path d="M216,293.39s-1,.3-1.32.36a13.39,13.39,0,0,1-2.7-.48,3.43,3.43,0,0,0-2.28.18c-.54.42-3.59,2.28-3.83,2.4a1.51,1.51,0,0,1-1.33-1,10.46,10.46,0,0,1,2-5.1c1.38-1.61,2.28-1.86,4-2.69s4.67-1.74,5.46-2.21a38.23,38.23,0,0,0,3.95-2.76,11.54,11.54,0,0,0,1.86-2.1,34.91,34.91,0,0,0,1.8-6c.11-.6.82-2.81,1.85-3.47s1.38-1,2.52-1a5.39,5.39,0,0,1,2.7,1.49c.54.42.9,1.32,1.5,4,.1.47-.18,3.66.06,4.08a7.9,7.9,0,0,1,.83,1.68c.05.36.11,2.27.89,3.05a26.85,26.85,0,0,0,4.2,2.52,23.3,23.3,0,0,1,4,3.18,14.58,14.58,0,0,1,1.43,3.29,19.31,19.31,0,0,1-.18,2.58c-.12.42-.82,2.51-1.25,2.21s-1.32-3.06-1.68-3.66a14.51,14.51,0,0,0-3.31-2.76c-.68-.3-3.3-1.56-3.54-1.32a2.84,2.84,0,0,0-.42.66s.24,2.46.36,2.94,1.56,5.69,1.62,6.11S216,293.39,216,293.39Z" fill="#231f20"/>
 
                <path d="M233.64,316.13c.54.55.36,1.2,1.13,1.52s1.73-.19,1.83.86v.05a2.4,2.4,0,0,0,.58-2.21,1.4,1.4,0,0,0-1.32-1c-.67-.11-1.07.11-1.5-.53a6.27,6.27,0,0,1-.71-1.61c0,.05,0,.23,0,.33a5.75,5.75,0,0,0,.79,1.75c.28.37.51.34,1,.37,1,.07,1.79.35,1.71,1.45,0,.47-.11.94-.53.7-.09-.05-.16-.23-.28-.3a1.38,1.38,0,0,0-.67-.08c-.71,0-1.18-.12-1.5-.83a2.48,2.48,0,0,0-.5-.82c.05,0-.06.27,0,.34Z" fill="#231f20"/>
 
                <path d="M231.08,313.61a5.63,5.63,0,0,0-.41,1.26c-.24.59-.74.69-1.19,1.05-.67.53-.44,1.2-.69,1.91a1.82,1.82,0,0,0,0,.33c1.05-.62,2.9-.79,2.78-2.32,0-.21,0,.12,0,.18.05.62-.81.91-1.25,1.08a8.9,8.9,0,0,0-1.49.72v.34a3.14,3.14,0,0,0,.12-.61A1.81,1.81,0,0,1,230,316c.83-.5.62-1.27,1.11-2,.05-.07,0-.3,0-.33Z" fill="#231f20"/>
 
                <path d="M219.24,315.44a4.69,4.69,0,0,1,.64,1.53c.14,1-.16,1-.55,1.65a3,3,0,0,0-.2.45c0,.55-.23.67-.56.36a2.78,2.78,0,0,1-.27-.78,11.87,11.87,0,0,0-.13-1.57c-.2-.63-.94-1.2-.82-1.93,0-.1,0-.2,0-.3a2.44,2.44,0,0,0,.45,1.83c.61,1,.29,2.26.93,3.31h0c.53-.18.39-.63.64-1.05a3.13,3.13,0,0,0,.59-1.2,4.34,4.34,0,0,0-.68-2.66s-.06.25,0,.34Z" fill="#231f20"/>
 
                <path d="M219.76,312.66a18.38,18.38,0,0,0,.44,2.21c.18.66.49.73,1,1.07.31.19.38.42.59.69,0,0,.23.2.24.24,0,.24.18-.14,0,0a1.65,1.65,0,0,1-.95-.1c-.43-.19-.85-.43-1.26-.65,0,0-.07.31,0,.35.41.21.82.46,1.26.65s.86-.12,1.15.31v0a1.62,1.62,0,0,0-.6-1.49c-.44-.49-1.07-.45-1.36-1.1a10.35,10.35,0,0,1-.51-2.46,1,1,0,0,0,0,.29Z" fill="#231f20"/>
 
                <path d="M217.51,312.91c0,.69-1,1.55-1.38,2a4,4,0,0,0-1,2.39c0,.46-.08,1.42.28,1.75v0c.13-.53.55-.34.83-.67s.07-.27.17-.53a2.32,2.32,0,0,1,.46-.93,1.67,1.67,0,0,0,.47-.79.93.93,0,0,0,0-.29c-.13.55-.73,1-1,1.51s.47-.05-.33.81c-.18.19-.59.48-.76.22,0-.05,0-.35,0-.46-.22-1.58.64-2.3,1.49-3.41a2.72,2.72,0,0,0,.75-1.69c0-.24,0,0,0,.09Z" fill="#231f20"/>
 
                <path d="M234,316.18c-.12.24,0,.51,0,.73s-.51,0-.69.32a1,1,0,0,0-.07.38c0,.09.08.36-.07.3s0-.14,0-.16-.07-.13-.21-.19-.52,0-.79-.19a1.82,1.82,0,0,1-.58-.89s-.05.24,0,.33a1.65,1.65,0,0,0,.75,1c.21.09.43,0,.63.09s.2.45.34.63h0a1.43,1.43,0,0,0,.06-.51,2.17,2.17,0,0,0,0-.25c0-.44.28-.28.56-.37s.05-.62.19-.88c0-.09,0-.3,0-.34Z" fill="#231f20"/>
 
                <path d="M217.7,309.35a19.55,19.55,0,0,0-.12,2.16l-.12,1.3s.24.83.6.24.54-.18.54-.18a.5.5,0,0,1,.66.06c.24.27.24-.28.24-.28s.06-.27.36.08c.65.82.18-.89.18-.89s.54-1.21.3-1.64S217.7,309.35,217.7,309.35Z" fill="#fff"/>
 
                <path d="M217.69,309.22c-.16,1.29-.16,2.21-.23,3.36a1,1,0,0,0,.06.55c.36.79.81-.59,1.08-.1h0s.17-.11.22-.09a.45.45,0,0,1,.28,0l.19.16c.21,0,.08,0,.2-.22s-.09-.21.1-.19.36.47.53.4c.35-.13-.2-1.38-.09-1.44.47-.23-.23.56.06.18a1.74,1.74,0,0,0,.13-.36,4,4,0,0,0,.16-.66,1.33,1.33,0,0,0-.09-.86c-.25-.32-.94-.43-1.3-.53a11.7,11.7,0,0,0-1.31-.27s0,.33,0,.34a14.49,14.49,0,0,1,1.61.38,2.44,2.44,0,0,1,.86.33c.36.31.11.81,0,1.21a1.09,1.09,0,0,0-.1.59c0,.12.23.68.1.76s-.35-.52-.6-.37,0,.29-.09.36-.2-.08-.33-.14-.3,0-.49,0-.12-.19-.42,0-.2.42-.44.39-.16-.24-.26-.31l0-.1v.2a3.42,3.42,0,0,0,0-.44c0-.26.05-.52.07-.77,0-.73,0-1.46.12-2.19C217.72,309.42,217.71,309.09,217.69,309.22Z" fill="#231f20"/>
 
                <path d="M233.52,283.68s1.32,1.56,1.5,1.68,2.34,1,2.52,1.14a8.62,8.62,0,0,1,1.93,1.32,10.29,10.29,0,0,1,2.58,4.61c.1.43.18,3.42-.12,3.36a1.12,1.12,0,0,1-.72-.72,5.34,5.34,0,0,0-1.08-1.93,12.86,12.86,0,0,0-3.65-2.64c-.66-.36-2.82-1.44-3.06-.66-.08.24,0-2.28-.06-2.7S233.52,283.68,233.52,283.68Z" fill="#f1d4c1"/>
 
                <path d="M222.62,279.73s3.23-1.45,4.19-1.32,3.59.48,4,.6a5.21,5.21,0,0,1,1.93,1.67,17.06,17.06,0,0,1,.83,3c0,.72-.18,3.06-.18,3.9s-.06,1.85-.06,2.45.24,2.4.36,3.84,1.68,6.83,1.68,7.31a18.89,18.89,0,0,1,.24,3c-.12,1-1.8,8.51-1.94,9.23s.6.36-.12.72-.47.42-.82.06-.48.06-.48.06l-.72-.48s-.36,0-.24-1.08a2.91,2.91,0,0,0-.83-2,9,9,0,0,1-1.56,1.8c-.48.24-2.56,1.66-3.89,1.56-1.68-.12-3.91-1.53-4.92-2s-1-.12-1.26-.72a3.52,3.52,0,0,0-.72-1.08,28.44,28.44,0,0,1-2.15-2.76c-.48-.84-1.09-3.23-.61-4.3a41.55,41.55,0,0,0,1.31-4.68c.13-.48-.48-3.83-.48-4.43a26.82,26.82,0,0,1,1.68-4.08c.36-.84.48-4.07.83-5.15A19.66,19.66,0,0,1,222.62,279.73Z" fill="#fff"/>
 
                <path d="M224.59,275.59c-.27,0,.83.18,1.44,0s1.44-.9,1.94-1a3.25,3.25,0,0,1,1.38.18,16.52,16.52,0,0,0,2.51.55c.36,0-.29-.12.06.06s0,.24-.3.56a2.54,2.54,0,0,1-1,.6c-.6.3-1.2.95-2,.82s-2.34,0-2.7-.3S225,275.53,224.59,275.59Z" fill="#ef4237"/>
 
                <path d="M225.91,270.61s-.12,0-.12.72a1.17,1.17,0,0,0,.6,1.14,1.81,1.81,0,0,1,.78,1.26c0,.54-1,.9-1.5.6a5.73,5.73,0,0,1-1.08-1.14,1.66,1.66,0,0,1-.29-.48,4.57,4.57,0,0,1,.47-1.06A3.34,3.34,0,0,1,225.91,270.61Z" fill="#fff"/>
 
                <path d="M230.53,271.33a8.1,8.1,0,0,1,1,2c.07.26-.7.86-1,.9-.48.06-.9-.12-1-.42s-.24-.78.18-1.14S230.47,272.35,230.53,271.33Z" fill="#fff"/>
 
                <path d="M215.66,285.42c-.42.22-4.07,1.38-4.55,1.62a9,9,0,0,0-3.18,2.27,10.06,10.06,0,0,0-1.32,2.82c-.18.61-.53,1.38,0,1.74s1.86-.19,2.21-.42a4.38,4.38,0,0,1,3-.56c.54.05,1.79.44,2.16.48a3.39,3.39,0,0,0,2.33-.48,8.2,8.2,0,0,0,.83-1.85c.17-.42,1.14-2.4,1-3.24s-.3-2.58-.3-3.18S217.16,284.64,215.66,285.42Z" fill="#f1d4c1"/>
 
                <path d="M225.25,273.37s.72-.3,1-.12a.88.88,0,0,1,.36.61.45.45,0,0,1-.51.37h0C225.61,274.15,225.49,273.61,225.25,273.37Z" fill="#231f20"/>
 
                <path d="M229.87,273.67s.12-.55.42-.6A1.48,1.48,0,0,1,231,273c.18.06.18.42,0,.66S230.41,274.45,229.87,273.67Z" fill="#231f20"/>
 
                <path d="M232,277.27a9.2,9.2,0,0,0,.42,2.46c.24.48.12.71.24.95s-.36-.3-.6-.55-.3-.3-.48-.18-.18-.36-.36-.3a3.58,3.58,0,0,0-.48.24.66.66,0,0,0-.12-.3c-.12-.18-.36-.42-.42-.18h-.66l-.12-.3s-.55.12-.6-.06.3-.55-.06-.18l-.36.36-.42-.06-.36-.06h-.72s-.18-.48-.3-.3l-.36.6-.3-.36-.3.48-.6.24-.17-.36-.31.48a.53.53,0,0,0-.59.24l-.07-.42-.24.36-.59.55h-.42l-.3.24H222l-.36-.18a8.9,8.9,0,0,0,.66-1c.3-.55.3-.3.3-.55a7.59,7.59,0,0,1,.48-1.32l.24-.72s.55-.24.78.06.36.24.55.12l.18-.12.6.18s.36-.18.48,0l.12.18a1.22,1.22,0,0,1,.6.06c.24.12-.12-.24.24.12s.6.18.6.18a.34.34,0,0,1,.46-.13h0a.62.62,0,0,0,.59,0l.31-.12.35-.06.42-.06.3-.12.36-.06.3-.06c.42.06.55.06.72-.12l.18-.18h0l.55-.18Z" fill="#424143"/>
 
                <path d="M218.15,300.88a3,3,0,0,1-.14,1.29c-.07.2-.15.4-.21.6a2.72,2.72,0,0,0-.08.63,4.7,4.7,0,0,0,.17,1.24c.08.42.21.83.3,1.25h0a5.25,5.25,0,0,1-.5-1.2,3.18,3.18,0,0,1-.07-1.3c0-.22.1-.43.14-.64s.07-.43.1-.64c.1-.42.21-.82.28-1.24Z" fill="#231f20"/>
 
                <path d="M218.89,308.47a5.23,5.23,0,0,1,.51.93c.06.16.12.33.19.49a2.6,2.6,0,0,0,.28.45,11.37,11.37,0,0,1,1.06,1.82h0a5.58,5.58,0,0,1-1.14-1.78c-.07-.16-.15-.32-.23-.47s-.2-.3-.28-.45a3.81,3.81,0,0,1-.4-1Z" fill="#231f20"/>
 
                <path d="M232.64,304.91a1.61,1.61,0,0,0-.85.87,4.93,4.93,0,0,0-.35,1.19,4.5,4.5,0,0,1-.4,1.24,6.07,6.07,0,0,0-.59,1.13,1.62,1.62,0,0,0,0,.62,2,2,0,0,0,.18.59c.17.39.41.75.58,1.16a2.33,2.33,0,0,1,.17.64,3.75,3.75,0,0,1,0,.67,1.41,1.41,0,0,0,.22,1.1h-.19a.42.42,0,0,1,.43-.1l-.16.18-.14-.3-.1-.2.22,0a.7.7,0,0,1,.61.63l-.09-.07a.33.33,0,0,0,.3-.19l0-.11.06.1.23.36h0l.25,0v0l-.24.08h0l0,0-.27-.33h.11a.49.49,0,0,1-.41.31h-.08v-.08a.54.54,0,0,0-.46-.43l.12-.17.16.29.14.26-.29-.08a.17.17,0,0,0-.15.05l-.08.11-.12-.1a1.06,1.06,0,0,1-.32-.65,3.75,3.75,0,0,1,0-.67,3.11,3.11,0,0,0,0-.61,2.31,2.31,0,0,0-.14-.59c-.14-.39-.35-.77-.49-1.19a2,2,0,0,1-.06-1.29,12.34,12.34,0,0,1,.51-1.18,7.19,7.19,0,0,0,.32-1.21,4.23,4.23,0,0,1,.42-1.24,2,2,0,0,1,.42-.51,1.22,1.22,0,0,1,.59-.29Z" fill="#231f20"/>
 
                <path d="M217.52,290.39a11.11,11.11,0,0,0-1.55,2.89v.11a4.38,4.38,0,0,0,.06,1.74,21.86,21.86,0,0,1-.06,4.49c-.05.61-.82,3.36-.9,4.14s-.48,1.26.12,2.4a9.94,9.94,0,0,1,1.2,2.82c.06.66-.31,2.81-.79,3.23s-1.55,1.44-1.79,1.68.24.55.6.36a4.48,4.48,0,0,0,1.14-.6c.18-.24.24.06.42.12s.35-.12.47-.3.49-.66.49-.66h.55s.28-1.62.28-2.1.24-.55,0-.9a13.75,13.75,0,0,1-.72-1.26,15.59,15.59,0,0,1-1.14-4.79,12.09,12.09,0,0,1,.83-3.9,4.85,4.85,0,0,0,.36-3.11,12.67,12.67,0,0,1-.72-2.7A10.76,10.76,0,0,1,217.52,290.39Z" fill="#231f20"/>
 
                <path d="M218.31,310.52c.64.43,1.06,1.14,1.7,1.59a9.06,9.06,0,0,0,1.23.66c1,.51,2.2,1.36,3.35,1.41a5.46,5.46,0,0,0,3.52-1.38,11.45,11.45,0,0,0,2.49-2c.05-.07,0-.3,0-.33-.56.85-1.89,1.48-2.68,2.12a5.15,5.15,0,0,1-3.47,1.22c-1.18-.1-2.4-1-3.44-1.53a24.37,24.37,0,0,1-2.69-2.12s-.08.3,0,.35Z" fill="#231f20"/>
 
                <path d="M224.54,275.64a8.87,8.87,0,0,0,3.31.9,13.32,13.32,0,0,0,4.3-.9s0-.34,0-.34a13.86,13.86,0,0,1-4.3.89,8.91,8.91,0,0,1-3.31-.89s-.06.31,0,.34Z" fill="#231f20"/>
 
                <path d="M231.9,276.44a9.11,9.11,0,0,0,.16,2.9c.15.63.55.93.8,1.45a11,11,0,0,1,.52,2.76,14.22,14.22,0,0,1-.11,2.43c0,.94,0,1.87-.05,2.8a20,20,0,0,0,.07,2.68,32,32,0,0,0,1.07,5.89c.35,1.27.73,2.55,1,3.84a14.77,14.77,0,0,1-.54,6.19c-.39,1.65-.92,3.29-1.18,5a4.05,4.05,0,0,0,.41,2.82c-.09-.13.24-1,0-1.33-.32-.5-.31-.15-.27-.72a6.5,6.5,0,0,1,.27-1.22c.26-1,.53-2.08.77-3.13a26.92,26.92,0,0,0,.8-5.57,25.59,25.59,0,0,0-1.33-7.48,26.88,26.88,0,0,1-.77-3.67c-.17-1.54-.07-3-.09-4.51a40.71,40.71,0,0,0,.08-4.69,16,16,0,0,0-.51-3c-.37-1-1.1-1.31-1-2.66,0-.24-.06-1.53-.13-.69Z" fill="#231f20"/>
 
            </g>
 
            <g id="chinstrap">
 
                <path d="M279.73,292.58s-.55,1.51-.68,1.78-1.08,1.6-1.14,1.73-1.56,1.5-1.63,1.63a14.42,14.42,0,0,0-1.62,2.5,10.14,10.14,0,0,0-.73,2.18,15.52,15.52,0,0,0-.16,2.26,5.74,5.74,0,0,0,.56,1.34c.09,0,.5,0,.59-.11s.73-1,.79-1.07.82-1.54.88-1.61.68-1,.75-1.1.72-.64.83-.73.35-.61.46-.61.35-.75.35-.82.17-2.2.28-2.59.35-1.89.39-2.07A22.3,22.3,0,0,0,279.73,292.58Z" fill="#e6e7e7"/>
 
                <path d="M279.73,291.43a11.24,11.24,0,0,0-.37,1.41,11.3,11.3,0,0,1-1,2.15c-.16.27-2.09,2.31-2.46,2.84a9.44,9.44,0,0,0-1.86,3.29,10,10,0,0,0-.5,2.64,10.06,10.06,0,0,0,.23,2.93c.27.61.27.8.42.91s.27.27.41.17a2.13,2.13,0,0,0,.56-1,7,7,0,0,1,.57-1.47c.13-.31.59-1.26.74-1.56a7.21,7.21,0,0,1,1-1.41c.33-.31,1.23-1.11,1.41-1.27a5.61,5.61,0,0,0,.06-1.66s0,1.19-.35,1.45a9,9,0,0,0-1.85,2c-.37.69-1.73,2.66-2,2.6s-.55-.73-.62-1.11,0-.88,0-1.2a5.21,5.21,0,0,1,.57-2.55,14.28,14.28,0,0,1,1.43-2.33c.35-.46,1.32-1.26,1.6-1.58a12.34,12.34,0,0,0,1-1.28,11.71,11.71,0,0,0,1.15-1.85A20,20,0,0,1,279.73,291.43Z" fill="#231f20"/>
 
                <path d="M279.34,282.89l1.47-1,2.21-.47,2.12.28,2.2,1.93.92,1.75.1,3.13s3.17,4.78,3.4,5.71c.1.37.65,8.28.74,8.66s.55,3.5.64,3.77a1.8,1.8,0,0,1,.23.87c0,.59,0,2,0,2s-.19,1.19-.19,1.56a6.62,6.62,0,0,1-.92,1.66L291,314l-1.56.18,0-1.55-.83.47-1.07.46s-.84.54-1.31.33a4.58,4.58,0,0,1-.53-.14c-.09,0-.18.15-.25.07a1.09,1.09,0,0,0-.62-.4,1.7,1.7,0,0,1-.45-.26l.13.91-.31.17h-.85l-.33,0-.4.07-.39-.55H282l-.31-.27s-1.34-2.35-1.43-2.72a11.13,11.13,0,0,1-.27-2.44,7.21,7.21,0,0,0-.58-1.52,7.1,7.1,0,0,1-.53-2.37c-.05-1.33-.14-5.09,0-6.35a12.77,12.77,0,0,1,.44-2,6.85,6.85,0,0,0,.46-2.21,9.93,9.93,0,0,1,.09-3.41,4.19,4.19,0,0,1,.92-1.77c.28-.28.67-.48.7-.81a1.09,1.09,0,0,0-.56-1.1c-.47-.38-1.31-1.22-1.31-1.22a9,9,0,0,1-1.26-1.06C278.23,284.18,279.34,282.89,279.34,282.89Z" fill="#fff"/>
 
                <path d="M293.31,309.13s1.45,2.49,1.86,3a9.57,9.57,0,0,1,.76,1.22l.28.67c0,.08-.44,0-.51,0a2.2,2.2,0,0,1-.8-.58l.82.9s-.22.5-.91,0c-.05,0-.28-.16-.31-.23-.27-.69.21.67.21.67a1.16,1.16,0,0,1-1.33-.83l.34,1s-1.19.28-1.63-2.48S293.31,309.13,293.31,309.13Z" fill="#231f20"/>
 
                <path d="M289.51,314.2c-.12.21-.23.42-.33.64s-.26.2-.34.26a2.55,2.55,0,0,1-.85.31,2,2,0,0,0-.63.43,3.15,3.15,0,0,0-.31.57.73.73,0,0,0,0,.36,2,2,0,0,1,.36-.29c.17-.06.36-.18.49-.21a4,4,0,0,0,.86-.4s-.54.67-.59.78-.19.27-.24.43l-.21.69s.68-.31.76-.48a1.42,1.42,0,0,1,.63-.48l.62-.18.65-.48a.94.94,0,0,0,.79.51,4.6,4.6,0,0,0,1-.22,3.22,3.22,0,0,1,.73.22s.12-.19-.21-.55c-.16-.17-.43-.59-.59-.65s-.89-.15-1-.38a1.25,1.25,0,0,1,.06-.89c.11-.28-.23,0-.23,0l-.09,0h-.12l-.21-.05-.2,0-.28,0-.19.07Z" fill="#d2d3d4"/>
 
                <path d="M282.53,314.24s.11.31,0,.42a.74.74,0,0,1-.34.15l-.64.13-.84.41s-.25.16-.46.32-.11.44-.11.44l.43-.15.31,0s.55-.16.58-.08.31.09.31.09l.33-.05-.26.16-.25.33-.09.35a4.4,4.4,0,0,0,.41-.28.65.65,0,0,1,.51,0,1.07,1.07,0,0,0,.56.05,4.16,4.16,0,0,0,.5-.16,3.28,3.28,0,0,1,.69-.48,3.89,3.89,0,0,1,.49-.12c.12,0,.95.25,1.08.25a1.52,1.52,0,0,0,.55-.16.18.18,0,0,1,.25-.06l.34.16a.63.63,0,0,0-.3-.51c-.27-.17-.58-.55-.73-.53s-.72-.16-.85-.13-.55-.38-.58-.58l-.09.09h-.11l-.24,0h-.2l-.19,0-.17-.07-.25.12-.15-.12-.18.15Z" fill="#d2d3d4"/>
 
                <path d="M282.88,283.17a1.15,1.15,0,0,1,.63.17,1.09,1.09,0,0,1,.17.13.71.71,0,0,1,.1.14l.13.23v0s0,0,0,.06a3.19,3.19,0,0,1-.45.23l-.24.08a.71.71,0,0,1-.29,0,1,1,0,0,1-.48-.21.66.66,0,0,1-.27-.49c0-.07.05-.1.11-.13a1.77,1.77,0,0,1,.28-.15A.88.88,0,0,1,282.88,283.17Z" fill="#231f20"/>
 
                <path d="M282.78,283.45a.48.48,0,0,1,.24,0,.37.37,0,0,1,.14,0,.45.45,0,0,1,.24.19.24.24,0,0,1,0,.26.38.38,0,0,1-.28.14h-.15a.68.68,0,0,1-.36-.15.24.24,0,0,1-.06-.28.47.47,0,0,1,.09-.12A.49.49,0,0,1,282.78,283.45Z" fill="#fff"/>
 
                <path d="M282.12,309.76a5,5,0,0,0,1,2.48,6.44,6.44,0,0,0,1.24,1c.41.25.79.28,1.08.7h0c.37-.22.67.13,1,.1a4.65,4.65,0,0,0,1.3-.49c.68-.26,1.66-.6,1.91-1.32v-.1c-.23.66-1.29,1.07-1.91,1.31-.88.34-1.29.58-2.19.24h0c-.11.16-1.52-.79-1.7-.93a4.5,4.5,0,0,1-1.74-3.06.17.17,0,0,0,0,.1Z" fill="#231f20"/>
 
                <path d="M289.51,314.15a1.72,1.72,0,0,1-1.11,1.1c-.48.16-.85.18-1.17.68a1.31,1.31,0,0,0-.18,1h0c.28-.7,1.55-.46,1.74-1.13-.11.4-.69.67-.86,1.06a6.34,6.34,0,0,0-.21.86v.1l.06,0h0c.25-.33.51-.26.81-.48s.27-.43.58-.55.46,0,.67-.14.41-.48.55-.47c-.21,0,.69.53.26.37a1.38,1.38,0,0,0,.69.16c.29,0,.5-.24.78-.28s.52.26.81.28v-.08c0-.39-.22-.45-.43-.71s-.11-.34-.26-.47c-.5-.43-1.65.27-1.12-1.26,0,0,0-.09,0-.1-.31-.23-1.23.06-1.61,0,0,0,0,.1,0,.1.31,0,1.27-.21,1.48,0s0,.33,0,.59a.61.61,0,0,0,.14.47c.23.25.61.08.87.19a1,1,0,0,1,.53.66h0c.16,0,.5.44.34.52a3.91,3.91,0,0,0-.88-.22c-.64.07-1.18.55-1.59-.33h0c-.45.62-1,.42-1.58.78-.26.17-.33.56-.72.6-.11,0-.43.28-.15-.12a.21.21,0,0,0,0-.11c-.16-.14.86-1.33.91-1.38a.08.08,0,0,0,0-.1,9.55,9.55,0,0,1-1.51.65s-.36.31-.26.35c-.34-.12.44-1.13.69-1.27s.77-.14,1.12-.37a1.6,1.6,0,0,0,.62-.87S289.51,314.16,289.51,314.15Z" fill="#231f20"/>
 
                <path d="M287.81,285.26a2.43,2.43,0,0,0-.58-1c-.25-.13.12,0-.25-.13s-.07-.1-.37-.14-.28.14-.41,0-.1-.1-.26-.14a4.12,4.12,0,0,1-.58-.23c-.16-.1,0,.11-.16-.1s0-.11-.18-.2.05.11-.21-.1,0,0-.25-.2.39-.19-.21-.23-.2.07-.6,0-.11-.07-.39-.12a6.45,6.45,0,0,0-.92-.27H282c-.21,0-.09-.14-.32,0s-.09.07-.19.09c-.29.07-.09.07-.32.05s-.07-.05-.28,0,.07,0-.2.09-.19-.16-.42,0-.27.26-.36.23.06,0-.1,0,0,0-.16,0,.07.07-.14.05a.86.86,0,0,0-.32,0,.79.79,0,0,1,0-.37c0-.12.07-.09.19-.23s.16-.07.27-.16,0-.06.12-.1.14-.13.25-.18,0,0,.18-.11.12-.12.26-.17a.48.48,0,0,0,.25-.14c.12-.09.07-.14.26-.16s.1-.05.16-.08a3.43,3.43,0,0,0,.44-.19,5.64,5.64,0,0,1,2.39-.65,5.27,5.27,0,0,1,2.51.65,3.67,3.67,0,0,1,.94,1.17c.09.32.63,1.8.83,2.23s.69.86.9,1.34a15.28,15.28,0,0,1,.43,2.07,6.62,6.62,0,0,0,.85,1.57c.14.16.9,1.5,1.66,2.88.15.27.74,1.4.83,1.58a11.16,11.16,0,0,1,.76,1.94,30,30,0,0,1,.34,3.8c0,.55-.11,2-.06,2.9a35.34,35.34,0,0,0,.29,3.68,6.27,6.27,0,0,1,.37,1.26c0,.37.19.93-.16,1.16a7,7,0,0,1-1.71-1.87,12.79,12.79,0,0,1-1.51-3.45,37,37,0,0,1-.19-5.69c0-.55-.57-.69-.66-1s-.44-2.26-.79-3.23-.53-1.28-1.06-1.58-1.06-.28-1.4-.79-1.22-1.12-.76-2.14,1.2-.55,1.57-2a4.14,4.14,0,0,0-.05-1.45Z" fill="#231f20"/>
 
                <path d="M290.59,293.5a8.59,8.59,0,0,1,.53,1.55,22.32,22.32,0,0,1,0,3.06c-.09.28-.14.78-.21,1s.21-1.55.14-2,0-1.52,0-1.84C291,294.65,290.61,294,290.59,293.5Z" fill="#fff"/>
 
                <path d="M293.37,307.62l0,.71a5.11,5.11,0,0,1-.14,1.7c-.17.49-1.11,2.3-1.18,2.56a5.13,5.13,0,0,0-.25.69c0,.14-.14-.07-.14-.23s0,.21,0,.37-.16,0-.16,0a1.61,1.61,0,0,0-.07.37c0,.14-.12.07-.12,0s-.11.16-.14.28-.23,0-.23,0l-.09.23-.11-.21-.23.14,0-.16-.16.18-.07-.16-.18.18v-.18l-.16.18-.14-.16-.09.16-.12-.16-.16.1V314s0-.69,0-1,0-1.15,0-1.49a2.09,2.09,0,0,1,.23-.72" fill="#fff"/>
 
                <path d="M293.37,307.65a6.84,6.84,0,0,1-.66,3.48c-.09.19-.87,1.93-1,1.77v0c0,.07,0,.48-.16.32h0s-.11.47-.18.35h0c-.17,0-.1.38-.37.29h0c-.06.16-.11.18-.2,0h0c-.09.06-.22.14-.24,0v0c-.08.09-.17.17-.23,0h0c-.07.07-.17.31-.17.13v-.13c-.16.17-.14.2-.3,0h0c-.07.11-.12.1-.2,0h0c-.34.19-.12-.31-.11-.63a5.64,5.64,0,0,1,.28-2.38c0-.07,0-.23,0-.26a8.22,8.22,0,0,0-.34,3.49.51.51,0,0,0,0,.13.18.18,0,0,1,.25,0l0,0h0c.09-.16.37,0,.37-.13a.57.57,0,0,1,0,.13c.09-.09.19-.17.25,0h0c.07-.07.15-.19.18,0s0,0,0,0,.25-.09.34.07h0a4.15,4.15,0,0,1,.51-.43h0c.1-.14,0-.47.25-.35h0c.06-.13,0-.4.15-.17h0a5.51,5.51,0,0,0,.59-1.4,14.73,14.73,0,0,0,.88-1.89,7.72,7.72,0,0,0,.12-2.58c0-.18,0,0,0,.07Z" fill="#231f20"/>
 
                <path d="M284.39,313.22c.09.28,0,.86.14,1.16a1.22,1.22,0,0,0,.83.47c.53.12.86.13,1.19.64h0c.15-.09.3.11.31.25,0,.32-.18-.12-.37-.08-.42.08-.52.23-1,.17s-.79-.24-1.2-.13-.53.44-.85.62c-.1.05-2.08.05-2,.22-.19-.31,1.8-1.35,2-1.53,0,0,0-.1,0-.11-.6.64-1.82.77-2.06,1.74v.1a1.43,1.43,0,0,1,1.24-.24c.8.08.81-.25,1.41-.58s1,.1,1.68.09.75-.46,1.17,0v0a1.22,1.22,0,0,0,0-.27c-.05-.29-.62-.74-.9-.88-.51-.28-1.23,0-1.51-.73-.11-.28,0-.71-.11-1v.1Z" fill="#231f20"/>
 
                <path d="M282.33,315.63a1.66,1.66,0,0,1-1,.14c-.36,0-1.3.38-1-.06a2.85,2.85,0,0,1,1-.63c.23-.1,1.1-.18,1.24-.33.36-.4-.06-.72-.37-1.11h0c-.15.2-1.47-2.23-1.61-2.52-.49-1-.28-2-.55-3a.14.14,0,0,0,0,.09c.19.75,0,1.59.25,2.37.33,1.07,1.11,1.93,1.45,3h0c.13-.12.32.2.37.32h0c.19-.24.55.61.46.78s-1.33.33-1.6.5-.83.47-.83.92v.05a12.54,12.54,0,0,1,1.25-.23,1.59,1.59,0,0,0,1-.14s0-.1,0-.11Z" fill="#231f20"/>
 
                <path d="M278.09,284.45a9.81,9.81,0,0,1,2.69,2.17c.79.72.91,1,.24,1.65a4.06,4.06,0,0,0-.93,1.43,6.16,6.16,0,0,0-.48,2.24c0,.2,0,.38.05.59a11.49,11.49,0,0,1-.47,3.88,30.58,30.58,0,0,0-.35,7c0,2.14,1,3.77,1.45,5.8a.6.6,0,0,0,0-.23,24.13,24.13,0,0,0-.94-2.58,14.34,14.34,0,0,1-.48-5.05,19.45,19.45,0,0,1,.48-5.38,8.69,8.69,0,0,0,.48-2.25c0-1.61-.32-3,.59-4.52.34-.55,1.18-.92,1.21-1.61s-.49-.94-.87-1.27a9.77,9.77,0,0,0-2.69-2.16s0,.25,0,.27Z" fill="#231f20"/>
 
                <path d="M279.89,282.18s-.57.53-.55.64,1.05.48,1.42.95.95.42,1.08.55-.27.15-.77.13c-.23,0-.84-.26-1.2-.12a6.19,6.19,0,0,1-1.82.12,13.75,13.75,0,0,1-2.26-.79c-.05-.07-.35-.07-.35-.07s.49-.82,1.18-.87c.9-.07,2.08-.23,2.35-.28S280,282,279.89,282.18Z" fill="#595a5c"/>
 
                <path d="M280.14,285.82a2.22,2.22,0,0,0,1,0,5.05,5.05,0,0,1,.55-.18,3.55,3.55,0,0,1,.65-.12,5.77,5.77,0,0,0,1.78-.46,2.42,2.42,0,0,1,1.36-.42,5.84,5.84,0,0,0,1.18.21l.11,0c.22-.09.5-.55.69-.49a.35.35,0,0,1,.2.28,5.7,5.7,0,0,0-.55.21c-.21.09-.18.23-.41.2a6,6,0,0,0-1.36-.2,3.85,3.85,0,0,0-1.36.46,5.65,5.65,0,0,1-1.59.41,14,14,0,0,1-1.54.3c-.21,0-.65,0-.65,0Z" fill="#231f20"/>
 
                <path d="M283.1,283.69a.07.07,0,0,1,0,.08s-.06.05-.1.06-.36,0-.27-.13S283,283.64,283.1,283.69Z" fill="#231f20"/>
 
                <path d="M275.47,283.55s0,0,.1,0c.39-.05.78-.09,1.17-.11s1.09.23,1.49.25a5.42,5.42,0,0,1,1.68.08,5.66,5.66,0,0,0,1.9.6c.16,0-.28.12-.79-.07-.13,0-1-.41-1.27-.48a5.53,5.53,0,0,0-1.52,0c-.1,0-.93-.19-1.36-.27a2.43,2.43,0,0,0-.66,0C276.08,283.49,275.62,283.62,275.47,283.55Z" fill="#231f20"/>
 
                <path d="M282.19,313.87c.18.12.18.43.34.53s0,0,.16-.06.11.08.16.08.08-.09.13-.1.07-.1.11-.09a2,2,0,0,1,0,.24h0c.09-.19.09-.27.22,0h0c.07-.2.07-.17.2,0h0c.12-.21.12-.16.2,0h0c.06-.22.05-.23.19,0h0c.09-.22.08-.14.16,0h0c.06-.14.06-.22.2-.08v0c0-.12,0-.14.1-.19s0-.26,0-.28-.06.05-.1.1.05.19-.12,0h0c-.1.22-.1.18-.18,0h0c-.08.21-.07.17-.2,0h0c-.07.25-.07.22-.15,0h0c-.12.2-.11.18-.25,0h0c-.07.21-.07.16-.17,0h0a.59.59,0,0,1-.09.2s-.05-.11-.06-.21v0c-.2.18-.18.24-.4.08h0c-.09.22-.12.17-.22,0a1.07,1.07,0,0,0-.28-.41s-.05.23,0,.28Z" fill="#231f20"/>
 
                <path d="M292.86,307.15c-.07,0,.23,1,.24,1.73a6.37,6.37,0,0,1,0,1.38c-.12.61.17.05.17.05l.22-.81-.06-1.87A6.17,6.17,0,0,1,292.86,307.15Z" fill="#231f20"/>
 
            </g>
 
            <g id="macaronia_bub" data-name="macaronia bub">
 
                <path d="M257.91,316.21a1.06,1.06,0,0,1,.51-1.19,17.43,17.43,0,0,1,3-.78l4.14-1.56.88-.25,0,.91.66.3a4,4,0,0,1,1,.24,6.46,6.46,0,0,1,.83.42,8,8,0,0,1,.72.78q.22.35.42.72v.8l-.45-.3.09.75-1.32-.6-2,.42-.72-.3-.12.42-1.14-.12-.18.54a13.65,13.65,0,0,0-2.57-.6,14,14,0,0,0-2.28.78,1.92,1.92,0,0,1-1-.42A1.25,1.25,0,0,1,257.91,316.21Z" fill="#f9c6d6"/>
 
                <path d="M259.08,285.35c.13-.12.9-1.62,1-1.86s1.49-2.46,2.76-2.4,3.89,1,4.25,2.58.55,3.48,1.14,4.2a20.76,20.76,0,0,1,2.1,2.69,5.83,5.83,0,0,1,1.2,2.82,14.14,14.14,0,0,1,.06,3.05c-.06,1,.24,4.08.36,5.28a16.68,16.68,0,0,1-1,4.68c-.2.48-1,2-1.26,2.57a18,18,0,0,1-2.34,3,7.94,7.94,0,0,0-1.5,1,4.71,4.71,0,0,1-1.68,1c-.24-.06-.77.48-1.14.42a2.47,2.47,0,0,0-1,.12l-2.59.66s-.18-.18-.48.06a4.5,4.5,0,0,0-1.14,1.25c-.12.37-.55,0-.78,0s-.66.36-1.08.3a4.49,4.49,0,0,1-1.49-.6c-.37-.24-.19-1-.9-1.85a18.47,18.47,0,0,1-1.92-4.26,26.3,26.3,0,0,1,.3-4.37c.05-.55,2.39-8.81,2.81-9.71s1.44-.48,1.74-2.46S258.48,285.89,259.08,285.35Z" fill="#fff"/>
 
                <path d="M266.42,312.85c0-.26,0-.28-.07-.08l-.06.16a2,2,0,0,0,0,.24,1,1,0,0,0,0,.24,1.35,1.35,0,0,0,.47.91c.3.21.44.11.82.15a3.43,3.43,0,0,1,2.13,1c.38.4.25.84.37,1.35v-.32c-.56-.49-1-1.15-1.78-1.21-1.07-.08-1.91.38-2.78-.41,0,0-.07.28,0,.35.88.79,1.71.32,2.78.4.76.06,1.23.73,1.78,1.22a1.7,1.7,0,0,0,0-.32c-.11-.45,0-.82-.21-1.2a2.57,2.57,0,0,0-1.62-1c-.35-.09-.79-.09-1.12-.18-.58-.15-.74-.57-.69-1.15,0-.15.1-.31,0-.46,0,0-.06.26,0,.34Z" fill="#231f20"/>
 
                <path d="M266.27,313.39a3.43,3.43,0,0,0,1.68.72,2,2,0,0,1,1.43.89s.06-.25,0-.33c-.64-1.13-2.21-.83-3.12-1.63,0,0-.07.28,0,.35Z" fill="#231f20"/>
 
                <path d="M257.81,316.63a2.1,2.1,0,0,0,.67,1c.73.5,1.39-.18,2.08-.38a4.87,4.87,0,0,1,1.9-.1c.62.05,1.3.46,1.88.46h0c.19-.55-.26-1.05-.61-1.44a2.8,2.8,0,0,0-2.06-.61,3.05,3.05,0,0,0-1.88.66c-.07.05,0,.32,0,.34a3.75,3.75,0,0,1,1.38-.66,6.36,6.36,0,0,1,1.22.15c.74.06,1.35.08,1.68.94.09.25.23.18,0,.24a4.67,4.67,0,0,1-.75-.28,5.26,5.26,0,0,0-3,0c-1.12.45-1.93.74-2.48-.65,0,.05-.05.24,0,.33Z" fill="#231f20"/>
 
                <path d="M262,315a16.33,16.33,0,0,1,1.86.27,2.74,2.74,0,0,1,1,.42c.07.05.67.86.55.9s0,.22,0,.25a1.08,1.08,0,0,0,.16.42v-.34a1.53,1.53,0,0,0-1.38-.12c-.06,0,0,.34,0,.35a1.5,1.5,0,0,1,1.38.11,1,1,0,0,0,0-.34,2,2,0,0,1-.14-.25v.26c.37-.13-.33-1.38-.44-1.48-.71-.69-2.09-.71-3-.81,0,0,0,.34,0,.35Z" fill="#231f20"/>
 
                <path d="M253.08,315.66c.22.37.55.9,1,1,.25.09,1.27-.1,1.4.31h0a14.4,14.4,0,0,0,2-.21c.65-.21.91-1.1,1.51-1.38.3-.14.52.08.67,0-.1,0,.65-.17.22-.1.12,0,.71-.32.74-.45s0-.31,0-.32a.11.11,0,0,1-.12,0v.35a7.19,7.19,0,0,0,1.46-.33c.37-.11,1-.2,1.22.1h0c.14-.08,1-.81,1-.5v0c.36.11,1-.67,1.34-.87a10.61,10.61,0,0,0,1.69-1.09c.07-.06,0-.32,0-.35a8.11,8.11,0,0,1-1.61,1,10.28,10.28,0,0,0-.81.67,1.66,1.66,0,0,1-.55.31c-.2.07-.06-.1-.09-.09-.23.07-.52.32-.75.37a2.26,2.26,0,0,1-.58,0,5.09,5.09,0,0,0-1,.19,6.87,6.87,0,0,1-1.35.27.69.69,0,0,0,0,.35.11.11,0,0,0,.11,0v-.32s-.91.55-.9.55-.32-.26-.53-.21c-.8.18-1.08,1.33-1.95,1.49a5.1,5.1,0,0,1-2.13.05c-.91-.22-1.4-.22-2-1.17,0,0-.05.25,0,.33Z" fill="#231f20"/>
 
                <path d="M265.42,316.56c.52.75,1.24.43,2,.26a2.72,2.72,0,0,1,2.23.4,2.8,2.8,0,0,0,0-.29,6.78,6.78,0,0,0-.19-1c0,.06,0,.23,0,.33a5.73,5.73,0,0,1,.17.92v-.3a2.66,2.66,0,0,0-2-.45c-.77.16-1.63.6-2.18-.2,0,0-.06.26,0,.33Z" fill="#231f20"/>
 
                <path d="M264.71,282.71c.23.2.12.72.48,1.68s1.14,2,1.44,2.7,1.5,1.67,2,2.45a13.33,13.33,0,0,1,2,3.78c.17,1.08-.56,2.69-.31,3.72s.66,4.07.73,4.55a36.34,36.34,0,0,1-.66,4c-.07.29-.56,1.38-1,2.51a16.46,16.46,0,0,1-2.24,3.59c-.27.29-.49.5-.7.72a3.06,3.06,0,0,1-.63.51,11.7,11.7,0,0,0-1,.75,10.21,10.21,0,0,0,1.92-.9,7.6,7.6,0,0,0,1.2-1.26,7.2,7.2,0,0,1,1-1.08,12.62,12.62,0,0,0,1.5-2c.42-.84,2.3-4.88,2.57-5.69a23.74,23.74,0,0,0,1.14-6.18,37.6,37.6,0,0,0-1.74-8.57c-.3-.66-.78-1-1.2-1.74S269.75,282,269,281a8.57,8.57,0,0,1-1.14-1.56c-.31-.6-.48-3.7-1.5-4.72s-2.58-3.24-4.38-3.12a6.39,6.39,0,0,0-4.31,2.88c-.36.9-1.26,2.28-1.26,3.48s.6,2.76.66,3.83-1.74,3.12-2,3.66a22.87,22.87,0,0,0-2,3.48,71.52,71.52,0,0,0-2.4,7.37,30.82,30.82,0,0,0-.78,4.37,46.11,46.11,0,0,0,.24,4.92,40.8,40.8,0,0,1,.72,5.69,6.5,6.5,0,0,1-1.14,2.82c-.53.66-2.63,1.44-3,2s-.78,1-.55,1.08.66.48.9.12-.12.3.3.18a1.93,1.93,0,0,0,.56-.27h0a2.85,2.85,0,0,0,.33-.25s-.53.65-.05.59a5.36,5.36,0,0,0,1.23-.46l.27-.13s-.61.65-.07.53a4.86,4.86,0,0,0,1.62-.82,10.53,10.53,0,0,1,1.92-.72c.24-.06,1-.72.78-1.32s-.6-2.21-.83-2.58a3,3,0,0,1-.6-2.21c0-1.54,2.1-9.17,2.34-10.48a8.38,8.38,0,0,1,1.2-3.42c.54-.6,1.14-.6,1.56-2s.12-4.92,1-6.18a25.05,25.05,0,0,0,1.91-2.57,3.51,3.51,0,0,1,1.26-2.21C262.73,282.11,263.81,281.93,264.71,282.71Z" fill="#020202"/>
 
                <path d="M266.05,269.07a4.34,4.34,0,0,0-1.17,1.13c-.33.43-.66.88-1,1.3s-.72.83-1.08,1.27a4.45,4.45,0,0,0-.48.66,1.61,1.61,0,0,0-.2.77l-.12,0a.71.71,0,0,1,.41-.31,2.46,2.46,0,0,1,.47-.1c.32-.05.64,0,.93-.1l.92-.18.48-.08a1.8,1.8,0,0,1,.52.05,3.56,3.56,0,0,1,.87.44,5.35,5.35,0,0,1,.77.58c.24.2.43.47.71.55a1.48,1.48,0,0,0,.87-.18h0m0,0a3.36,3.36,0,0,1-.42.22.93.93,0,0,1-.49.07,1,1,0,0,1-.46-.21l-.37-.3a6.3,6.3,0,0,0-.76-.51,4.31,4.31,0,0,0-.81-.39,2,2,0,0,0-.87,0l-.93.15c-.34,0-.64,0-1,0a2.22,2.22,0,0,0-.45.05.57.57,0,0,0-.34.22h0a.05.05,0,0,1-.08,0h0a.05.05,0,0,1,0-.05,1.79,1.79,0,0,1,.25-.81,6.45,6.45,0,0,1,.47-.69c.32-.45.64-.9,1-1.34s.68-.87,1-1.3a3.36,3.36,0,0,1,1.32-1Z" fill="#ffde11"/>
 
                <path d="M268.26,272.06a1.94,1.94,0,0,1-1.26.57,10.6,10.6,0,0,1-1.38,0,4.2,4.2,0,0,0-1.32.12,1.93,1.93,0,0,0-1.06.77l-.11-.08a11.68,11.68,0,0,1,.84-1.12,4.61,4.61,0,0,1,1-1,3.06,3.06,0,0,1,.67-.28c.22-.07.45-.13.68-.18a9.34,9.34,0,0,1,1.38-.19h0m0,0c-.45.11-.9.23-1.34.36l-.65.23a3.28,3.28,0,0,0-.6.28,5.71,5.71,0,0,0-1,.89c-.31.34-.61.69-.91,1h0a.08.08,0,0,1-.11,0h0a.09.09,0,0,1,0-.1,2.45,2.45,0,0,1,1.15-.77,4.18,4.18,0,0,1,1.36-.28c.46,0,.91.06,1.35,0a2.13,2.13,0,0,0,1.25-.37m0,0,0,0s0,0,0,0Z" fill="#ffde11"/>
 
                <path d="M253.05,272.1a7.65,7.65,0,0,1,2,0,13,13,0,0,1,1.93.42c.31.1.62.18.94.3a2.28,2.28,0,0,1,.82.55l.33.36a3.6,3.6,0,0,0,.4.28l.43.24a2.31,2.31,0,0,1,.42.27l-.14.12c-.39-.44-.79-.87-1.22-1.27-.22-.2-.44-.39-.67-.57a6.89,6.89,0,0,0-.71-.49,3.05,3.05,0,0,0-.78-.35c-.27-.08-.57-.14-.86-.23a2.73,2.73,0,0,1-.83-.39,1.49,1.49,0,0,1-.55-.71m0,0a1.53,1.53,0,0,0,.6.61,2.62,2.62,0,0,0,.81.29l.87.19a3.05,3.05,0,0,1,.86.35,6.84,6.84,0,0,1,1.42,1.1,12.67,12.67,0,0,1,1.18,1.35h0a.09.09,0,0,1,0,.13.09.09,0,0,1-.12,0,1.93,1.93,0,0,0-.36-.28l-.42-.28a2.7,2.7,0,0,1-.4-.29c-.11-.12-.21-.25-.33-.36a1.72,1.72,0,0,0-.81-.48c-.31-.09-.63-.15-.95-.22-.64-.13-1.26-.3-1.9-.41a11.43,11.43,0,0,0-1.93-.23h0Z" fill="#ffde11"/>
 
                <path d="M260.5,274.26a9.49,9.49,0,0,0-1.15-1.54,3.44,3.44,0,0,0-1.48-1.2,10.29,10.29,0,0,1-1.72-.95,6.54,6.54,0,0,1-1.38-1.4v0m0,0a18.54,18.54,0,0,0,1.54,1.18l.8.55c.28.19.55.34.83.53a11.21,11.21,0,0,1,1.59,1.17,4.56,4.56,0,0,1,.61.78,2.17,2.17,0,0,1,.39.91s0,0,0,0a0,0,0,0,1,0,0s0,0,0,0h0Z" fill="#ffde11"/>
 
                <path d="M260.9,274.25a4,4,0,0,0-.33-1.35,2.18,2.18,0,0,0-.33-.62,2.69,2.69,0,0,0-.55-.46,3.31,3.31,0,0,1-.58-.47,2.9,2.9,0,0,1-.44-.6,3.63,3.63,0,0,0-.81-1.15v0h0a1.44,1.44,0,0,1,.62.41,5,5,0,0,1,.42.6,5.87,5.87,0,0,0,.39.58c.15.18.31.35.48.52l.52.52a2.91,2.91,0,0,1,.47.58,1.91,1.91,0,0,1,.15,1.46h0Z" fill="#ffde11"/>
 
                <path d="M259.86,274.68a3.43,3.43,0,0,0-.72-.47,6.91,6.91,0,0,0-.79-.33,8.09,8.09,0,0,0-.83-.28,8.74,8.74,0,0,0-.87-.14l-.44-.06a.56.56,0,0,0-.36,0c-.1.05-.23.16-.36.23a2.6,2.6,0,0,1-.42.19,2.49,2.49,0,0,1-1.8-.07v0h0a3.47,3.47,0,0,0,1.69-.18,2.54,2.54,0,0,0,.38-.16c.13-.06.23-.14.4-.22a.62.62,0,0,1,.27-.05,1,1,0,0,1,.24.05l.43.12a8.26,8.26,0,0,0,.86.2c.29.06.58.08.88.16a2.37,2.37,0,0,1,1.47,1m0,0s0,0,0,0,0,0,0,0Z" fill="#ffde11"/>
 
                <path d="M262.3,273.91a.35.35,0,0,1,0-.33.51.51,0,0,1,.21-.25l.27-.09a.78.78,0,0,0,.24-.16l.39-.36a3.83,3.83,0,0,1,.46-.33h0a1.05,1.05,0,0,1-.28.53,1.18,1.18,0,0,1-.52.27.94.94,0,0,0-.28.1,1.8,1.8,0,0,0-.19.2,1.24,1.24,0,0,0-.29.39h0Z" fill="#fcee23"/>
 
                <path d="M260.65,274.39a1.63,1.63,0,0,0-.53-1.24,3.23,3.23,0,0,0-.56-.48,6.67,6.67,0,0,0-.64-.37,2.9,2.9,0,0,1-.6-.44,2.53,2.53,0,0,1-.48-.6,1.54,1.54,0,0,1,0-1.5m0,0a2,2,0,0,0,.26,1.35,3.74,3.74,0,0,0,.41.55c.17.17.34.34.53.5a4.23,4.23,0,0,0,.6.41,5.4,5.4,0,0,1,.65.4,1.3,1.3,0,0,1,.44.64.94.94,0,0,1,0,.77Z" fill="#fcee23"/>
 
                <path d="M264.71,270.19a1,1,0,0,1,.35.58,2,2,0,0,1,0,.69,3.82,3.82,0,0,1-.12.66,2.16,2.16,0,0,1-.26.65,1.16,1.16,0,0,1-.55.45,3,3,0,0,1-.67.11,3.53,3.53,0,0,0-.65.11.84.84,0,0,0-.49.36.53.53,0,0,0-.08.27.08.08,0,0,0,0,.07v0h0a.1.1,0,0,0-.05.06,3.14,3.14,0,0,1,.13-.68,9.47,9.47,0,0,1,.48-1.25,8.36,8.36,0,0,0,.51-1.19,1.26,1.26,0,0,0,0-.61.81.81,0,0,0-.38-.49v0h0a.79.79,0,0,1,.49.47,1.19,1.19,0,0,1,.07.7,5.82,5.82,0,0,1-.45,1.27c-.17.4-.36.8-.5,1.21a3.2,3.2,0,0,0-.15.61.16.16,0,0,1-.09.13.13.13,0,0,1-.12,0,.2.2,0,0,1-.11-.09.13.13,0,0,1,0-.08v-.15a.74.74,0,0,1,.15-.34,1.15,1.15,0,0,1,.59-.37c.21,0,.44-.08.66-.1a1.74,1.74,0,0,0,.62-.17.93.93,0,0,0,.41-.42,4.77,4.77,0,0,0,.37-1.22,1.61,1.61,0,0,0-.2-1.23v0Z" fill="#fcee23"/>
 
                <path d="M260.28,274.62A3.48,3.48,0,0,0,259,273.4a4,4,0,0,0-1.64-.78c-.3,0-.6,0-.91-.05a2.32,2.32,0,0,1-.94-.23,3.94,3.94,0,0,1-1.34-1.32v0h0a7.54,7.54,0,0,0,1.45,1.07,2.4,2.4,0,0,0,.83.24,5.71,5.71,0,0,1,.92.16c.29.11.58.23.86.36s.58.23.86.37a3,3,0,0,1,.76.57,1.66,1.66,0,0,1,.43.83v0Z" fill="#fcee23"/>
 
                <path d="M263.7,274a1,1,0,0,1,.48-.72,2.9,2.9,0,0,1,.41-.16c.13,0,.26-.12.38-.18a2,2,0,0,1,.83-.21,2.66,2.66,0,0,0,.4,0,.28.28,0,0,0,.28-.18h0a.33.33,0,0,1-.24.39,1.29,1.29,0,0,1-.43.07c-.28,0-.53,0-.81.06a.89.89,0,0,0-.39.12,1.63,1.63,0,0,0-.31.27c-.2.18-.38.34-.59.56m0,0v0Z" fill="#fcee23"/>
 
                <path d="M258.85,274.38a.7.7,0,0,0-.23-.28c-.09-.09-.19-.18-.27-.27a4.19,4.19,0,0,0-.56-.48,1.8,1.8,0,0,0-.66-.34,1.94,1.94,0,0,0-.76,0l-.75.11c-.25.05-.5.11-.76.14a1.47,1.47,0,0,1-.83-.09.78.78,0,0,1-.5-.62h0a.82.82,0,0,0,.56.43,2.12,2.12,0,0,0,.71,0,6.2,6.2,0,0,1,1.55-.12c.26,0,.52.06.77.1a2.54,2.54,0,0,1,.77.23,1.8,1.8,0,0,1,.6.53l.23.31a.59.59,0,0,1,.14.38m0,0v0Z" fill="#fcee23"/>
 
                <path d="M256.57,287.38c.24.19-1,1.68-1.27,3.41s-.66,2.94-.66,4-.42,5.1-2.1,7.25a21.07,21.07,0,0,1-3.71,3.9c-.24.06-.72-.18-.55-1.08s.78-1.2,1.44-3.24,3.11-5.69,3.17-7.31a15.79,15.79,0,0,1,1.68-5.39C255.05,288.16,256.22,287.09,256.57,287.38Z" fill="#020202"/>
 
                <path d="M269.57,286.43a3.23,3.23,0,0,1,1.61.6,15.93,15.93,0,0,1,2.34,2.09c.41.55,3.18,3,4,4.86a15.1,15.1,0,0,1,1.08,3.48,23.36,23.36,0,0,0,.47,3.47c.3.6,1.2,2.1,1.14,2.7s-.11.9-.35.72-2.46-1.44-3.06-2.88a31,31,0,0,0-1.8-3.66,18.81,18.81,0,0,1-1.56-2.76,14,14,0,0,0-.6-3.11c-.42-.78-1.62-1.62-1.86-2s-.66-1.8-.89-2.21S269.39,286.55,269.57,286.43Z" fill="#231f20"/>
 
                <path d="M271.24,288.29c.32.34,1.68,1.55,2.16,2a17.06,17.06,0,0,1,2.52,3.54c.72,1.38,1.26,4.43,1.68,5.33s1.38,2.94,1.56,3.36.59,1.32.3,1.26a6.82,6.82,0,0,1-2.21-2.1,27.09,27.09,0,0,1-1.5-2.94,24.64,24.64,0,0,0-1.93-3.35c-.22-.44-.06-1.5-.3-2.34A10.83,10.83,0,0,0,271.6,290C270.65,289,269.51,286.37,271.24,288.29Z" fill="#e6e7e7"/>
 
                <path d="M256.44,288.1a21.65,21.65,0,0,0-1.14,2.82,26.93,26.93,0,0,0-.48,3.59c0,.78-.36,5.39-2.7,8.28-1.76,2.17-1.91,2-1.91,2a27.66,27.66,0,0,0,2.57-3.53,13.3,13.3,0,0,0,1.68-5.88C254.59,293.68,254.76,290.62,256.44,288.1Z" fill="#fff"/>
 
                <path d="M253.2,291.46a9.82,9.82,0,0,1-.54,3.24c-.36,1.24-.9,2.58-1.07,3.11s-1.38,2.58-1.62,3.06l-.24.48a23.29,23.29,0,0,1,1.08-2.52,20.71,20.71,0,0,0,1.08-2.57A29.64,29.64,0,0,0,253.2,291.46Z" fill="#fff"/>
 
                <path d="M259.56,277.32a1.56,1.56,0,0,1,.54-.9c.42-.3.72-.48,1-.24s.61.72.83.82,1.2,0,1.38.24.18.6-.24.66-1.28.35-1.38.72a5,5,0,0,1-1.5,2.34c-.21.22-.66.18-.72,0a8.59,8.59,0,0,1-.6-2.16c-.09-.79-.55-.66-.59-1.14s-.07-.82.47-.71S259.43,277.38,259.56,277.32Z" fill="#f15b2b" stroke="#231f20" stroke-miterlimit="10" stroke-width="0.28"/>
 
                <path d="M258.54,278s.36-1,1.14-.19c.23.26.27-1.08,1-1.13s.43,1.32.61,1.08c.71-1,1.13.24,1.25.42s1.2-.18,1-.56a1.57,1.57,0,0,0-1.2-.71c-.6-.12-.71-.66-1.31-.78s-.83.06-1.32.42a1.26,1.26,0,0,1-1,.36.6.6,0,0,0-.6.29v.48C258.12,277.85,258.24,277.8,258.54,278Z" fill="#f9c6d6"/>
 
                <path d="M262.74,276.24c-.14-.13.06-.83.6-.72a1.51,1.51,0,0,1,.83.55S263.69,277.08,262.74,276.24Z" fill="#ec2227"/>
 
                <path d="M257.77,276s.11-.86.6-.72.67.83.6.83A1.11,1.11,0,0,1,257.77,276Z" fill="#ec2227"/>
 
                <ellipse cx="263.36" cy="276.15" rx="0.15" ry="0.09" fill="#231f20"/>
 
                <ellipse cx="258.49" cy="275.91" rx="0.15" ry="0.09" fill="#231f20"/>
 
                <path d="M260.46,279.88a8.77,8.77,0,0,1,.83-1.91c.16-.26.41-.55.75-.37s.37.53.5.78h0s0-.34,0-.34c-.13-.25-.27-.48-.42-.71-.34-.31-.65,0-.83.29a7.9,7.9,0,0,0-.84,1.93c0,.09,0,.27,0,.33Z" fill="#231f20"/>
 
                <path d="M258.54,278.2a.9.9,0,0,1,.36-.55c.27-.13.66.13.77.38,0-.06,0,.1,0,.13l.06.4c.05.32.08.65.1,1s0,0,0-.1c0-.32-.06-.64-.09-.95a4.19,4.19,0,0,0-.11-.78.71.71,0,0,0-.72-.43c-.24.07-.37.39-.43.6s0,.28,0,.34Z" fill="#231f20"/>
 
            </g>
 
        </g>
 
        <g id="Layer_1_copy" data-name="Layer 1 copy">
 
            <path d="M40.63,307.14c-.39-1.23,1.58-4,.42-14.73-1-9.12-15.28-9.4-18.51-3.23-1.64,3.13-1,14.59-1.83,15.85S12.16,316.75,11,319.77s-3.42,6.31-2.81,10.52c.19,1.32,1,3.22.91,3.29-3.09-.07-1.3,3.44-2.52,5.05-1.93,2.51-3.39,1.18-4.28,3-1.8,3.72,7.37,5.68,8.35,6.52s5.62,3.37,7.58,3.09,2.38-1.82,3.37-2.53,15.08,0,15.5-.14c1-.35,1.8,1.83,5.53,2.16,5.32.46,17.68-2.44,17.62-4.75a8.37,8.37,0,0,0-1.83-2.67,19.25,19.25,0,0,0,.91-6c-.21-2.74-5.94-.65-5.82-2.24.34-5-2.9-3.7-2.84-4.58.57-8-3.87-13.63-4.17-14.71-.18-.62-4.77-5.19-5.9-8.7Z" fill="#231f20"/>
 
            <path d="M18,351.69c-2.24,0-6.55-2.36-7.53-3.21a11.26,11.26,0,0,0-1.83-.77c-2.35-.87-5.91-2.19-6.72-4.23a2.36,2.36,0,0,1,.1-2A2.5,2.5,0,0,1,3.85,340a4.09,4.09,0,0,0,2.43-1.65,4,4,0,0,0,.44-2.13c0-1.28.09-2.85,1.87-3.06L8.52,333a16.81,16.81,0,0,1-.72-2.61c-.48-3.32.78-6.09,1.88-8.53.35-.77.68-1.49.94-2.19.94-2.48,6.08-9.7,8.56-13.17.58-.81,1-1.4,1.16-1.64.29-.44.39-3.07.48-5.39.15-4,.31-8.52,1.32-10.43,1.73-3.3,6.7-5.1,11.58-4.18,4.41.84,7.29,3.66,7.71,7.56.81,7.53.1,11.15-.28,13.11A4,4,0,0,0,41,307c.76,2.36,3.2,5.29,4.65,7a7,7,0,0,1,1.25,1.68,8.36,8.36,0,0,0,.56,1.07,23.77,23.77,0,0,1,3.64,13.69l.33.1c1,.26,2.76.75,2.5,4.56.2.26,1.13.26,1.81.26,1.63,0,3.87,0,4,1.93a16.45,16.45,0,0,1-.82,5.68c0,.06,0,.12-.05.17.48.51,1.77,2.1,1.79,2.79a1.54,1.54,0,0,1-.57,1.13c-2.45,2.32-12.83,4.45-17.49,4a8.1,8.1,0,0,1-4.44-1.71c-.46-.34-.74-.53-.92-.46a24.1,24.1,0,0,1-3.85,0c-3.51-.1-10.82-.29-11.56.11a4.54,4.54,0,0,0-.77.81,4.15,4.15,0,0,1-2.77,1.78ZM9.05,334c-1.36,0-1.45.79-1.5,2.3a4.51,4.51,0,0,1-.61,2.59,4.78,4.78,0,0,1-2.85,1.94,1.78,1.78,0,0,0-1.39,1,1.63,1.63,0,0,0-.08,1.35c.68,1.69,4.17,3,6.26,3.77a8.48,8.48,0,0,1,2.07.91c1,.85,5.48,3.25,7.25,3a3.35,3.35,0,0,0,2.26-1.5,5.29,5.29,0,0,1,.93-1c.67-.47,4.58-.46,12-.26,1.74,0,3.38.09,3.61.06.54-.2,1,.16,1.62.58a7.27,7.27,0,0,0,4,1.56c4.72.42,14.8-1.87,16.86-3.82a.78.78,0,0,0,.31-.51,8.77,8.77,0,0,0-1.53-2.24h0l-.15-.17c-.16-.18-.13-.31,0-.82A16,16,0,0,0,59,337.4c-.08-1.09-1.38-1.18-3.2-1.18-1.1,0-2,0-2.39-.45a.9.9,0,0,1-.23-.68c.22-3.14-1.06-3.49-1.9-3.71-.41-.11-1-.27-.94-.87a23.12,23.12,0,0,0-3.52-13.31,7.7,7.7,0,0,1-.63-1.25,14.35,14.35,0,0,0-1.09-1.38c-1.49-1.79-4-4.79-4.79-7.3h0a4,4,0,0,1,.13-1.95c.37-1.9,1.07-5.46.27-12.86-.38-3.52-3-6.08-7.06-6.84-4.53-.86-9.12.76-10.69,3.75-.93,1.74-1.11,6.37-1.25,10.09-.13,3.32-.22,5.22-.63,5.82-.16.24-.59.84-1.17,1.66-2.26,3.16-7.57,10.59-8.46,13-.28.73-.63,1.47-1,2.25-1.12,2.45-2.28,5-1.83,8.07a16.56,16.56,0,0,0,.68,2.48c.28.81.32,1,.12,1.16l-.13.12H9.05Z" fill="#231f20"/>
 
            <path d="M35.24,299.56c0-.07-.82-5.44,2.59-4.95,2.47.35,2.5,3.59,2.42,4.53s-.63,3-1.36,2.75-.1-.11,0-.16c1.32-.37,1.36-4.57.62-5.28a1.71,1.71,0,0,0-2.32.11,4.93,4.93,0,0,0-.75,3.49c0,.14-1.25-.42-1.25-.49Z" fill="#fff"/>
 
            <path d="M45.26,336.18c-.14.28-8.69,9.51-5.19,12.62,2.53,2.25,9.26.84,11.79.28s8-2,7.71-3.5-2.24-.71-1.54-2.67,1.12-4.63.7-5.75c-.79-2.12-5.32.84-5.61-1.12s.14-3.72-2.1-4.56-5.62,4.42-5.76,4.69Z" fill="#fdb826"/>
 
            <path d="M20.64,333.37c-.62-.31-.81-.18-1.33.14-1,2.88-3.32,3.93-4.07,3.93a5.62,5.62,0,0,1-2.59-.62c-1.68-.63-3-3.05-3.09-3C6,335,9,337.73,7.74,339.2c-.77.9-3.55.85-4.38,2.73-1.21,2.67,4,2.59,6.64,4,3.47,1.84,6.16,5.2,9.22,4.05,3.4-1.28,1.51-6.05,1.65-8.27s1.83-7.35-.21-8.33Z" fill="#fdb826"/>
 
            <path d="M39.74,303.66c0-1.34-1.6-2-2-2.22-.56-.32-2-1.74-3.78-1.65a4.27,4.27,0,0,0-2.13.53c-1.88,1.25-4.63,1.81-5.42,2.5-1,.85-.42,1.74.13,2.36.71.8,6.62,3.47,8.4,3.47,1,0,3.61-1.18,2.71-1.91-.49-.4-2.57.75-5.82-.85-1.8-.88-4.27-1.15-4.14-1.77.06-.25.19-.26.36-.27s.18.44.4.58c2.36,1.51,6.33,2.52,9,1.77.71-.19,1-.91,1.25-1.3s1.07-.38,1.07-1.23Z" fill="#fdb826" fill-rule="evenodd"/>
 
            <path d="M34.94,309c-1.93,0-7.93-2.73-8.71-3.6a2.49,2.49,0,0,1-.76-1.72,1.75,1.75,0,0,1,.67-1.21,7.83,7.83,0,0,1,2.16-1A16.16,16.16,0,0,0,31.6,300a4.77,4.77,0,0,1,2.33-.6,5.75,5.75,0,0,1,3.58,1.4,3.19,3.19,0,0,0,.42.3l.15.07c.62.32,2.06,1.06,2.06,2.51a1.38,1.38,0,0,1-.87,1.27,1.59,1.59,0,0,0-.27.18l-.12.21a2.69,2.69,0,0,1-1,1.1.8.8,0,0,1,.26.92C37.87,308.26,35.81,309,34.94,309Zm-.82-8.84H34a3.88,3.88,0,0,0-1.93.46,17,17,0,0,1-3.46,1.6,8.6,8.6,0,0,0-1.92.86,1,1,0,0,0-.39.65,1.7,1.7,0,0,0,.57,1.12c.62.73,6.44,3.33,8.09,3.33.82,0,2.44-.82,2.49-1.17a2.82,2.82,0,0,0-.71,0,8.49,8.49,0,0,1-5-.79,15.6,15.6,0,0,1-2.19-.82l-.22-.06c-1.27-.39-2.18-.66-2-1.39a.68.68,0,0,1,.72-.59.65.65,0,0,1,.65.56l0,.12a10.35,10.35,0,0,0,1,.57,15,15,0,0,1,2.27.83l.09.05a10.3,10.3,0,0,0,5.22.24,1.58,1.58,0,0,0,.86-.88l.15-.25a1.42,1.42,0,0,1,.55-.45c.32-.18.45-.26.45-.56,0-.94-1.13-1.53-1.62-1.78l-.17-.09a4.59,4.59,0,0,1-.51-.35A5.09,5.09,0,0,0,34.12,300.2Z" fill="#231f20"/>
 
            <path d="M34.6,300.65c-.31,0,1.12-.17,1,.46,0,.11.07.24-.28.24S35.48,300.54,34.6,300.65Z" fill="#231f20" fill-rule="evenodd"/>
 
            <path d="M35.37,301.45c-.2,0-.23-.2-.25-.33s0-.34-.28-.37h-.28a.13.13,0,0,1-.11-.06l0-.06,0-.05a.09.09,0,0,1,.07,0h.22a1.93,1.93,0,0,1,.71.12.45.45,0,0,1,.28.46v.05a.25.25,0,0,1-.06.2A.45.45,0,0,1,35.37,301.45Zm-.12-.66a1.09,1.09,0,0,1,.07.3.47.47,0,0,0,0,.16.4.4,0,0,0,.19,0v-.13a.18.18,0,0,0-.06-.17A.56.56,0,0,0,35.25,300.79Z" fill="#231f20"/>
 
            <path d="M33.34,300.68c.07,0-.84-.28-.94,0s.21.32.49.25.39-.25.46-.25Z" fill="#231f20"/>
 
            <path d="M32.65,301.06a.39.39,0,0,1-.31-.11.27.27,0,0,1,0-.31c.09-.26.53-.21.88-.12.18,0,.28.06.27.17v.09h-.08l0,0a1,1,0,0,1-.4.21A1.26,1.26,0,0,1,32.65,301.06Zm.05-.4a.51.51,0,0,0-.17,0s0,0,0,0,0,.08,0,.1a.52.52,0,0,0,.37,0,.8.8,0,0,0,.25-.11A1.92,1.92,0,0,0,32.7,300.66Z" fill="#231f20"/>
 
            <path d="M32.46,299.7c0-.08.18-4.94-2.28-5.5-1.94-.44-2.7.17-3.47,1.25a7.18,7.18,0,0,0-.63,5.29c.74,1.79,3.4.47,3.36.08-1.06-.47-1.27-2.42-.69-4s2.88-1.52,3.22-.16a7.25,7.25,0,0,1,.31,3.07c-.07.24-.69.41-.69.41a1.33,1.33,0,0,0,.81-.31C32.45,299.75,32.44,299.78,32.46,299.7Z" fill="#fff" fill-rule="evenodd"/>
 
            <path d="M30,296.65c-.15-.26-.46,0-.68.37a1.54,1.54,0,0,0-.21,1.65c.14.27.35.27.46.12s-.12-.56,0-1,.35-.39.42-.69S30.13,296.8,30,296.65Z" fill="#fff"/>
 
            <path d="M37.34,299.42a.31.31,0,0,1-.31-.25.24.24,0,0,1,0-.12V299a2.17,2.17,0,0,1,.43-1.8.31.31,0,0,1,.41-.15.32.32,0,0,1,.15.42.29.29,0,0,1-.1.12,1.54,1.54,0,0,0-.28,1.31c0,.12.06.44-.24.5Z" fill="#fff"/>
 
            <path d="M23.24,305.63c-.13-.66-.5.38-.81.63-.73.59-2.46,2.56-2.78,2.81s1.59-.85,1.94-.71,2-1.16,1.65-2.73Z" fill="#fff"/>
 
            <path d="M19.87,313.94c-.56-.85-5.32,5.05-5.32,8.42,0,5,.63,5.05,1.2,6.59,0,.07-2.46.35-2.46,1.55,0,.36.78-.92,3.16-.92.07,0,2-.14,2.81.63.56.56.66,1.89.71,1.89,1.54,0,2.24.43,2.72,1.7,1.38,3.29-2.08,4.31-.21,13.48,0,.07.79.29.47-1.21-.66-3.09-.4-5.71.35-7.2a29,29,0,0,0,1.33,3.27,7.48,7.48,0,0,0,6.57,3.09c3.8-.07,6.94-3.16,7.56-2.82.32.17-1.87,2.29-1.68,3.65.13.91.08,1.75.85,1.88a3.79,3.79,0,0,1,.14-2.95c.78-1.23,1.75-3.23,1.75-3.23s5.71-5.46,6.18-10.59a28.42,28.42,0,0,0-3-14.05c-.77-1.5-1-3.48-1.64-4.38-1.61-2.19-1.91-4.69-2.19-4.84-.77-.42-2.65,1.56-3.94,1.7-1.64.21-3.87-.86-5.1-1.44-.94-.45-3.16-2-3.8-2s0,1.34-.28,1.88-2,2.11-2.24,3a13.81,13.81,0,0,1-.77,3.23c-.64,1.54-2.14,4.28-2.62,5.22a16.55,16.55,0,0,0-1.64,9.84,5.22,5.22,0,0,0-2.23-.48c-.84-1.05-1.46-5.16-1.25-6.7a11.09,11.09,0,0,1,1.07-3.6c.87-1.6,2.22-3.92,3.49-4.6Z" fill="#fff"/>
 
            <path d="M40.85,306.53c3.66,3.89,11.43,6.12,14.12,6.29a38.1,38.1,0,0,0,11-1.64c3.11-1.08,3.7,5.07,1.92,6.95a21.09,21.09,0,0,1-7.55,5.38c-7.29,2.91-11,1.47-11.84,1s-10.28-20.81-7.59-18Z" fill="#231f20"/>
 
            <path d="M50.91,325.81c-1.33-4.72-4.08-8.89-5.4-11.94-.51-1.15,3.75,5.95,6,11.58,0,0-.15.28-.28-.16Z" fill="#fff"/>
 
            <path d="M62.22,311.64l-.6.54a18.42,18.42,0,0,0,2.13,3.59c1.53,1.66,2.86,1.4,2.86,1.4S63,314.84,62.22,311.64Z" fill="#fff"/>
 
            <g id="sanitiser">
 
                <path d="M61.64,301.7a4.21,4.21,0,0,1-2.29-1.46,8,8,0,0,1-.16-1.09s-.23.57-2,.84-2.07-.21-2.07-.21a7.09,7.09,0,0,1,.14,1,3.57,3.57,0,0,1-1.63,2.12c-.13.14-1.14,1.06-1,1.65l2.67,15a1.34,1.34,0,0,0,1.51,1.15l7.28-1.12a1.35,1.35,0,0,0,1.1-1.56h0l-2-15.12C63.09,302.3,62.53,302.08,61.64,301.7Z" fill="#f0eff0"/>
 
                <polygon points="53.36 306.91 54.38 313.1 64.05 311.65 63.24 305.39 53.36 306.91" fill="#fff"/>
 
                <path d="M59.59,299.25a3.89,3.89,0,0,1-2.33.88,4.06,4.06,0,0,1-2.48-.14l-.51-3.31s.15.51,2.33.17,2.47-.91,2.47-.91Z" fill="#15bff1"/>
 
                <path d="M59.1,296c.12.25-1,.66-2.34.87s-2.44.15-2.5-.13,1-.66,2.34-.87S59,295.76,59.1,296Z" fill="#0797bf"/>
 
                <path d="M57.93,295.9s-.25.48-1.21.62a1.63,1.63,0,0,1-1.35-.23l-.43-2.77s.1.43,1.27.25,1.29-.64,1.29-.64Z" fill="#15bff1"/>
 
                <ellipse cx="56.19" cy="293.35" rx="1.3" ry="0.42" transform="translate(-44.07 12) rotate(-8.77)" fill="#0797bf"/>
 
                <path d="M55.76,307.54l-.13,0-.19,0-.15,0-.11,0c0,.07,0,.14,0,.23s0,.18,0,.26h.21l.21,0,.15,0,0,.2-.17,0-.19,0h-.2c0,.07,0,.19.05.34s0,.26,0,.33l-.28,0,0-.25c0-.14,0-.32-.08-.55a1.71,1.71,0,0,0-.06-.35l-.06-.43.17,0,.25,0,.26,0,.18,0Z" fill="#1867b1"/>
 
                <path d="M57,308.73l-.2,0-.25,0-.22,0-.19,0c0-.07,0-.17-.05-.32A4.8,4.8,0,0,0,56,308c0-.14,0-.28-.06-.4s0-.24-.06-.35l.29,0a2.2,2.2,0,0,0,0,.27c0,.13,0,.25.06.4s0,.31.07.44l0,.24h.23l.21,0,.14,0Z" fill="#1867b1"/>
 
                <path d="M57.46,308.67l-.28,0a2.42,2.42,0,0,0,0-.26c0-.13,0-.31-.08-.54l-.06-.36c0-.13,0-.28-.07-.43l.29,0a3.24,3.24,0,0,0,.06.4c0,.14,0,.27,0,.37s.05.36.08.51S57.45,308.61,57.46,308.67Z" fill="#1867b1"/>
 
                <path d="M58.53,307.44a.54.54,0,0,1,0,.31.45.45,0,0,1-.2.23.53.53,0,0,1-.15.08l-.18,0,.08.47-.29,0s0-.13,0-.27,0-.31-.09-.58c0-.09,0-.2-.05-.31l-.07-.42h.19A1.65,1.65,0,0,1,58,307a.65.65,0,0,1,.21,0,.49.49,0,0,1,.19.16A.54.54,0,0,1,58.53,307.44Zm-.28.06a.36.36,0,0,0-.07-.17.34.34,0,0,0-.12-.12l-.1,0h-.14a1,1,0,0,0,0,.17,1.39,1.39,0,0,1,0,.23c0,.05,0,.11,0,.19l0,.13h0l.1,0a.19.19,0,0,0,.09-.05.42.42,0,0,0,.09-.14A.41.41,0,0,0,58.25,307.5Z" fill="#1867b1"/>
 
                <path d="M59.64,307.29a.55.55,0,0,1,0,.31.74.74,0,0,1-.2.23l-.15.07-.18,0,.07.47-.28,0s0-.14,0-.27l-.09-.59c0-.09,0-.2-.05-.31s0-.26-.07-.41l.1,0h.09a1.22,1.22,0,0,1,.33,0,.46.46,0,0,1,.21.05.47.47,0,0,1,.19.15A.6.6,0,0,1,59.64,307.29Zm-.28,0a.49.49,0,0,0-.06-.17.28.28,0,0,0-.13-.11.17.17,0,0,0-.1,0h-.14a.65.65,0,0,0,0,.17c0,.1,0,.17,0,.23s0,.11,0,.19l0,.13h0l.11,0,.08-.05a.33.33,0,0,0,.1-.14.67.67,0,0,0,0-.2Z" fill="#1867b1"/>
 
                <path d="M60.88,308.14l-.2,0-.27,0-.24,0-.19,0a1.52,1.52,0,0,0,0-.27c0-.14,0-.31-.08-.56,0-.1,0-.21,0-.35s-.05-.27-.07-.41l.18,0,.24,0,.28-.05.18,0,0,.23h-.12l-.2,0-.16,0-.12,0a1.77,1.77,0,0,0,0,.21c0,.08,0,.16,0,.25h.11l.11,0,.22,0,.16,0,0,.19-.17,0-.21,0h-.22a1.76,1.76,0,0,0,0,.27,2.07,2.07,0,0,0,0,.23l.13,0,.17,0,.19,0,.12,0Z" fill="#1867b1"/>
 
                <path d="M62.2,307.85,62,308a3.14,3.14,0,0,0-.2-.26l-.36-.41h0s0,0,.07-.06l.08-.09a.53.53,0,0,0,0-.12.33.33,0,0,0,0-.14.21.21,0,0,0,0-.13.22.22,0,0,0-.1-.09h-.24c0,.11,0,.22,0,.32s0,.19,0,.29,0,.3.08.47l0,.31-.28,0s0-.12,0-.24,0-.32-.08-.56a2.21,2.21,0,0,0-.05-.33c0-.13,0-.28-.08-.46H61l.15,0,.24,0a.58.58,0,0,1,.19,0,.45.45,0,0,1,.21.12.49.49,0,0,1,.1.22.57.57,0,0,1,0,.26.6.6,0,0,1-.14.21h0a3.31,3.31,0,0,1,.28.31C62.09,307.76,62.17,307.81,62.2,307.85Z" fill="#1867b1"/>
 
                <path d="M55.17,311a.46.46,0,0,1,0,.23.48.48,0,0,1-.12.16.52.52,0,0,1-.19.11,1.09,1.09,0,0,1-.24.07l-.14,0h-.09l-.07-.23h.09l.14,0,.13,0,.11-.06a.22.22,0,0,0,.07-.09.2.2,0,0,0,0-.11.31.31,0,0,0,0-.1.25.25,0,0,0-.1-.08l-.13-.05-.13-.07a.7.7,0,0,1-.17-.13.46.46,0,0,1-.08-.19.48.48,0,0,1,0-.17.39.39,0,0,1,.08-.14.52.52,0,0,1,.18-.15.92.92,0,0,1,.27-.08l.13,0h.08l.06.23h-.19l-.12,0-.1.06a.22.22,0,0,0-.05.08.14.14,0,0,0,0,.09.12.12,0,0,0,.05.1.25.25,0,0,0,.1.08l.11.05.13.06a.45.45,0,0,1,.17.13A.4.4,0,0,1,55.17,311Z" fill="#1867b1"/>
 
                <path d="M56.58,311.24l-.26.12a1,1,0,0,0-.08-.18l-.16-.32-.46.08c0,.14,0,.26,0,.36a.89.89,0,0,0,0,.19l-.28,0,.11-.62c.06-.37.11-.7.17-1l.29,0c.15.31.31.62.47.93S56.56,311.2,56.58,311.24Zm-.58-.57-.14-.28-.12-.27h0c0,.08,0,.18,0,.32s0,.22,0,.31h0l.34-.05Z" fill="#1867b1"/>
 
                <path d="M57.63,309.5c0,.14,0,.28.06.44s0,.26.05.31l.07.48,0,.3-.22.1c-.18-.23-.36-.43-.52-.63l-.31-.38h0c0,.19.06.41.11.65s.06.4.06.44l-.26.05s0-.12,0-.24,0-.29-.07-.51a3.22,3.22,0,0,0-.06-.35c0-.14,0-.29-.07-.44l.24-.1.31.4a6,6,0,0,0,.49.55h0c0-.13-.05-.31-.09-.51s-.06-.38-.08-.53Z" fill="#1867b1"/>
 
                <path d="M58.45,311l-.29,0s0-.13,0-.26,0-.31-.08-.54l0-.35c0-.14-.05-.28-.07-.43l.28,0,.06.4c0,.15,0,.27.06.37s0,.36.08.51S58.44,311,58.45,311Z" fill="#1867b1"/>
 
                <path d="M59.48,309.46l-.13,0-.29,0c0,.11,0,.21,0,.31s0,.21,0,.33.05.28.07.43a1.72,1.72,0,0,1,0,.28l-.28.05s0-.13,0-.26,0-.28-.07-.46,0-.22-.05-.31,0-.21,0-.31l-.28,0-.14,0,0-.24.22,0,.33-.05.36-.05.21,0Z" fill="#1867b1"/>
 
                <path d="M60.1,310.75l-.28,0c0-.05,0-.13,0-.26s0-.32-.08-.54l0-.36c0-.14,0-.28-.07-.43l.28,0c0,.12,0,.25.06.4s0,.27.06.37.05.35.08.51S60.09,310.69,60.1,310.75Z" fill="#1867b1"/>
 
                <path d="M61.15,310.12a.36.36,0,0,1,0,.23.52.52,0,0,1-.13.17.72.72,0,0,1-.19.11l-.24.07h-.23l-.06-.23h.08l.14,0,.13,0a.24.24,0,0,0,.11-.06.27.27,0,0,0,.07-.08.21.21,0,0,0,0-.11.22.22,0,0,0-.05-.11l-.1-.07-.12-.06-.13-.06a.45.45,0,0,1-.17-.13.39.39,0,0,1-.08-.2.22.22,0,0,1,0-.16.37.37,0,0,1,.07-.14.4.4,0,0,1,.19-.15,1.07,1.07,0,0,1,.27-.09l.13,0h.07l.06.24h-.19l-.12,0-.1.06,0,.07a.17.17,0,0,0,0,.1.14.14,0,0,0,0,.1.39.39,0,0,0,.1.08l.11,0,.14.06a.7.7,0,0,1,.17.13A.43.43,0,0,1,61.15,310.12Z" fill="#1867b1"/>
 
                <path d="M62.32,310.41l-.2,0-.27,0-.24,0-.18,0s0-.12,0-.26,0-.32-.09-.56a2.67,2.67,0,0,0,0-.35l-.06-.41.18,0,.23,0,.29,0,.18,0,0,.22-.13,0-.2,0-.15,0H61.5a.89.89,0,0,0,0,.22l0,.24h.12l.1,0,.23,0,.15,0,0,.19-.17,0-.21,0-.11,0h-.12c0,.07,0,.16,0,.27s0,.18,0,.23l.14,0,.16,0,.19,0,.13,0Z" fill="#1867b1"/>
 
                <path d="M63.65,310.1l-.24.15c-.06-.09-.13-.17-.2-.26s-.23-.27-.37-.41v0l.08-.05a.23.23,0,0,0,.07-.1.25.25,0,0,0,0-.11.33.33,0,0,0,0-.14A.24.24,0,0,0,63,309a.2.2,0,0,0-.1-.08h-.24c0,.11,0,.21,0,.31a2.93,2.93,0,0,1,0,.29c0,.15.05.31.07.47l.05.31-.28.05a.78.78,0,0,0,0-.25l-.08-.56a1.3,1.3,0,0,0-.06-.31c0-.11,0-.28-.07-.46l.1,0,.16,0a1,1,0,0,1,.24,0,.62.62,0,0,1,.19,0,.45.45,0,0,1,.21.12.55.55,0,0,1,.1.22.57.57,0,0,1,0,.26.6.6,0,0,1-.14.21h0l.28.31A1.68,1.68,0,0,0,63.65,310.1Z" fill="#1867b1"/>
 
                <path d="M55.67,307.47l-.14,0-.18,0-.16,0h-.11a1.2,1.2,0,0,0,0,.24,2,2,0,0,0,0,.26h.2l.21,0,.16,0,0,.2-.17,0-.2,0h-.2c0,.07,0,.18.05.33s0,.27.06.34L55,309l0-.26-.09-.55a2.93,2.93,0,0,0,0-.35c0-.13-.05-.28-.07-.43l.18,0,.24,0,.26,0,.18,0Z" fill="#2bace2"/>
 
                <path d="M56.94,308.66l-.2,0-.25,0-.22,0-.2,0c0-.06,0-.17,0-.31S56,308.17,56,308s-.05-.28-.07-.41,0-.24-.05-.35l.28,0s0,.14,0,.27,0,.25.06.4,0,.31.07.43l0,.25.11,0,.12,0,.21,0,.14,0Z" fill="#2bace2"/>
 
                <path d="M57.36,308.6l-.28,0c0-.05,0-.13,0-.26s0-.32-.08-.54l-.06-.36c0-.13,0-.28-.06-.43l.28,0c0,.12,0,.25.06.4s0,.27,0,.37.06.35.08.51S57.36,308.54,57.36,308.6Z" fill="#2bace2"/>
 
                <path d="M58.43,307.37a.58.58,0,0,1,0,.32.66.66,0,0,1-.21.23l-.14.07-.18,0,.07.47-.28,0s0-.13,0-.26l-.09-.59c0-.09,0-.2-.05-.31s0-.26-.07-.41h.19a1.22,1.22,0,0,1,.33,0,.5.5,0,0,1,.21.05.47.47,0,0,1,.19.15A.49.49,0,0,1,58.43,307.37Zm-.28.06a.64.64,0,0,0-.06-.18.47.47,0,0,0-.13-.11l-.1,0h-.15a1,1,0,0,0,0,.17,1.51,1.51,0,0,1,0,.22c0,.05,0,.12,0,.19s0,.12,0,.14h0l.1,0a.15.15,0,0,0,.09-.06.3.3,0,0,0,.09-.13A.41.41,0,0,0,58.15,307.43Z" fill="#2bace2"/>
 
                <path d="M59.55,307.2a.63.63,0,0,1,0,.31.52.52,0,0,1-.2.24l-.15.07-.18,0,.08.47-.29,0s0-.13,0-.26,0-.32-.08-.59a2.51,2.51,0,0,1,0-.31c0-.12-.05-.26-.07-.41h.09l.09,0a1.88,1.88,0,0,1,.34,0,.54.54,0,0,1,.21.05.48.48,0,0,1,.19.16A.67.67,0,0,1,59.55,307.2Zm-.29.06a.32.32,0,0,0-.06-.18.43.43,0,0,0-.12-.11L59,307h-.13a1,1,0,0,0,0,.17,1.51,1.51,0,0,1,0,.22,1.54,1.54,0,0,0,0,.19.4.4,0,0,0,0,.13h0l.11,0a.24.24,0,0,0,.09-.06.3.3,0,0,0,.09-.13.41.41,0,0,0,0-.19Z" fill="#2bace2"/>
 
                <path d="M60.78,308.07l-.2,0-.27,0-.24,0-.18,0s0-.13,0-.27-.05-.31-.09-.56a2.93,2.93,0,0,0,0-.35c0-.13,0-.27-.07-.41l.18,0,.24,0,.28-.05.19,0,0,.23-.13,0-.2,0-.15,0-.13,0a1.77,1.77,0,0,0,0,.21,1.87,1.87,0,0,1,0,.25l.12,0h.1l.23,0,.15,0,0,.19-.16,0-.21,0-.11,0-.12,0c0,.07,0,.15,0,.26s0,.19,0,.24l.14,0,.16,0,.19,0,.13,0Z" fill="#2bace2"/>
 
                <path d="M62.09,307.78l-.24.15c-.07-.09-.13-.18-.2-.26l-.37-.41h0a.21.21,0,0,0,.08-.06l.07-.09a.35.35,0,0,0,0-.14.33.33,0,0,0,0-.14.24.24,0,0,0-.05-.14.27.27,0,0,0-.1-.08l-.09,0h-.15c0,.11,0,.22,0,.32a2.7,2.7,0,0,0,0,.28c0,.16.05.32.08.47l0,.32L61,308s0-.12,0-.25l-.08-.56a2,2,0,0,0-.05-.31c0-.11,0-.28-.08-.45l.11,0,.15,0,.24,0,.19,0a.46.46,0,0,1,.21.13.41.41,0,0,1,.1.21.63.63,0,0,1,0,.27.56.56,0,0,1-.14.2h0l.28.31A1.52,1.52,0,0,1,62.09,307.78Z" fill="#2bace2"/>
 
                <path d="M55.07,311a.36.36,0,0,1,0,.23.52.52,0,0,1-.13.17.72.72,0,0,1-.19.11l-.24.07-.14,0h-.09l-.06-.24h.08l.15,0,.12,0,.11-.06a.16.16,0,0,0,.07-.09.17.17,0,0,0,0-.1.16.16,0,0,0,0-.11.27.27,0,0,0-.1-.08l-.12,0-.13-.07a.37.37,0,0,1-.17-.13.33.33,0,0,1-.08-.19.49.49,0,0,1,0-.17.37.37,0,0,1,.07-.14.7.7,0,0,1,.19-.15.92.92,0,0,1,.27-.08l.13,0h.07l.07.23h-.19l-.12,0a.21.21,0,0,0-.1.06l-.06.07a.17.17,0,0,0,0,.1.47.47,0,0,0,.05.1.41.41,0,0,0,.11.07l.11.05.13.06a.75.75,0,0,1,.17.14A.4.4,0,0,1,55.07,311Z" fill="#2bace2"/>
 
                <path d="M56.49,311.17l-.27.11a1.65,1.65,0,0,0-.08-.17,2.38,2.38,0,0,0-.16-.32l-.46.06c0,.14,0,.26-.05.36a1.52,1.52,0,0,0,0,.19l-.27,0,.1-.63c.07-.36.12-.69.17-1l.3-.05.47.94C56.38,311,56.46,311.13,56.49,311.17Zm-.59-.57c0-.09-.09-.18-.13-.28l-.13-.27h0a2.08,2.08,0,0,1,0,.3c0,.11,0,.21,0,.31h0l.35-.06Z" fill="#2bace2"/>
 
                <path d="M57.53,309.43l.06.43c0,.16,0,.26,0,.32s0,.31.08.48l0,.31-.22.1c-.18-.22-.35-.43-.52-.62l-.31-.39h0l.11.66c0,.24.06.39.07.44l-.27,0s0-.12,0-.24-.05-.29-.08-.51a2.93,2.93,0,0,0,0-.35c0-.14-.05-.28-.08-.44l.24-.1s.14.17.31.4.35.41.49.56h0l-.08-.51c0-.19-.06-.39-.09-.53Z" fill="#2bace2"/>
 
                <path d="M58.34,310.93l-.29,0c0-.05,0-.13,0-.26s0-.31-.08-.54l0-.35c0-.14-.05-.28-.07-.44l.28,0c0,.12,0,.26.06.4s0,.27.06.37,0,.36.08.51S58.34,310.87,58.34,310.93Z" fill="#2bace2"/>
 
                <path d="M59.39,309.38l-.13,0-.29.05c0,.11,0,.21.05.31s0,.21,0,.31,0,.29.07.43,0,.25,0,.29l-.29,0s0-.12,0-.25,0-.29-.07-.46a2.69,2.69,0,0,0-.05-.32c0-.09,0-.2,0-.31l-.28.05-.13,0,0-.24.23,0,.33-.05.35-.06.21,0Z" fill="#2bace2"/>
 
                <path d="M60,310.67l-.28.05c0-.05,0-.14,0-.27s0-.31-.08-.54l-.06-.35c0-.14,0-.28-.07-.43l.29,0a3.55,3.55,0,0,0,.06.4c0,.15,0,.27,0,.37s.05.35.08.5S60,310.62,60,310.67Z" fill="#2bace2"/>
 
                <path d="M61.05,310.05a.36.36,0,0,1,0,.23.52.52,0,0,1-.13.17,1.18,1.18,0,0,1-.19.11l-.24.06-.14,0h-.09l-.06-.23h.08l.14,0,.13,0,.11-.05a.31.31,0,0,0,.07-.09.2.2,0,0,0,0-.11.24.24,0,0,0-.05-.1.39.39,0,0,0-.1-.08l-.12-.06-.13-.06a.55.55,0,0,1-.17-.13.36.36,0,0,1-.08-.19.48.48,0,0,1,0-.17.61.61,0,0,1,.07-.14.7.7,0,0,1,.19-.15.84.84,0,0,1,.27-.08l.13,0h.07l.07.23h-.19l-.12,0-.1.06a.24.24,0,0,0-.06.08.14.14,0,0,0,0,.09.37.37,0,0,0,0,.11.41.41,0,0,0,.11.07l.11.05.13.06a.39.39,0,0,1,.17.14A.4.4,0,0,1,61.05,310.05Z" fill="#2bace2"/>
 
                <path d="M62.23,310.33l-.2,0-.28,0-.24,0-.18,0s0-.13,0-.27,0-.31-.09-.56a1.83,1.83,0,0,0-.06-.35c0-.13,0-.26-.06-.41l.18,0,.24,0,.28-.05.18,0,0,.22-.14,0-.2,0-.15,0-.12,0a1.92,1.92,0,0,0,0,.22c0,.07,0,.15,0,.24l.11,0h.11l.22,0,.16,0,0,.19-.17,0-.21,0h-.11l-.11,0a1.76,1.76,0,0,0,0,.27,1.71,1.71,0,0,0,0,.23l.13,0,.16,0,.19,0,.13,0Z" fill="#2bace2"/>
 
                <path d="M63.54,310l-.24.15a2.22,2.22,0,0,0-.2-.25c-.11-.14-.23-.27-.37-.42h0l.08-.06a.46.46,0,0,0,.11-.21.33.33,0,0,0,0-.14.34.34,0,0,0-.05-.14.39.39,0,0,0-.1-.08l-.09,0h-.16c0,.11,0,.22,0,.32s0,.19,0,.28.05.32.07.47l.05.32-.28,0,0-.25-.08-.56a1.55,1.55,0,0,0-.06-.33c0-.13,0-.28-.07-.45l.1,0,.16,0,.24,0a.62.62,0,0,1,.19,0,.45.45,0,0,1,.21.12.49.49,0,0,1,.1.22.57.57,0,0,1,0,.26.6.6,0,0,1-.14.21h0l.29.31C63.44,309.92,63.52,310,63.54,310Z" fill="#2bace2"/>
 
                <path d="M58.35,299.83a3.43,3.43,0,0,0,.2.94c.14.25,2.11,1.56,2.25,2s2.63,14.92,2.9,16.12c.21.91.94-.35,1-.56s-2-15.07-2.11-15.48-.23-.37-.58-.63a27.82,27.82,0,0,1-2.81-1.69,4.71,4.71,0,0,1-.24-1A1,1,0,0,1,58.35,299.83Z" fill="#dfe0e0" opacity="0.77" style="isolation:isolate"/>
 
                <path d="M55.55,293.52a.45.45,0,0,0-.07-.47.85.85,0,0,0-.53-.31l-.6-.31-.11-.67s2.56-.63,2.53-.37c-.05.47,1.49.53,2.35.2s1.81-.89,2.5-.59.9.15.7.77c-.11.38-.08.45-.79.23-.88-.27-1.07.29-2,.53a8.86,8.86,0,0,1-2.63.31c-.36-.09-.06.44-.06.44S56.74,293.55,55.55,293.52Z" fill="#15bff1"/>
 
                <path d="M54.28,291.8l.07.6.52.27s.5.13.59.39a1.27,1.27,0,0,1,.09.47,2,2,0,0,0,.35,0c.15,0,0-.63-.1-.8s-.15-.05-.27-.36a.62.62,0,0,1,0-.5A4.55,4.55,0,0,1,54.28,291.8Z" fill="#dfe0e0" opacity="0.77" style="isolation:isolate"/>
 
                <path d="M56.8,292.89v-.4a9.32,9.32,0,0,0,1.9-.1,5.07,5.07,0,0,0,1.64-.52,1,1,0,0,1,.75-.27,7.44,7.44,0,0,1,1.1.36s0,.2-.18.17a3.38,3.38,0,0,0-.62-.18,2.44,2.44,0,0,0-.54,0,2.43,2.43,0,0,0-.62.32,4,4,0,0,1-1,.37,7.36,7.36,0,0,1-1.48.23A5.47,5.47,0,0,0,56.8,292.89Z" fill="#dfe0e0" opacity="0.77" style="isolation:isolate"/>
 
            </g>
 
            <path d="M65.81,316.52c-3.19-2.33-6.6-8.76-1.08-7.2a5,5,0,0,1,3.18,1.78c.56.65,1.93,5.23-.13,7.45C68,316.93,67.31,317,65.81,316.52Z" fill="#231f20"/>
 
            <path d="M63.27,309.22c-.68,0-1.11.23-1.25.7-.5,1.51,1.06,4.87,3.81,6.53a3.36,3.36,0,0,0,.75.27c.94.28,1.44.31,1.4,1.36,1.54-2.24.34-6.29-.17-6.9a4.89,4.89,0,0,0-3.09-1.72,5.05,5.05,0,0,0-1.44-.24Z" fill="#fff"/>
 
            <path d="M66.56,319.17s.26,0,.51-.62.31-1.15-.75-1.47a3.85,3.85,0,0,1-1-.47c-2-1.12-4.14-5.12-3.59-6.78.13-.4.5-.89,1.52-.89a7,7,0,0,1,1.71.21A5.76,5.76,0,0,1,68,311c1,1.31,2.22,5.63-.41,7.86l-1.89,1.3Z" fill="#231f20"/>
 
        </g>
 
        <g id="elastic">
 
            <polyline points="41.32 301.98 41.76 301.67 41.76 302.16 41.05 302.51 41.32 301.98 41.05 302.51 41.05 302.51 41.05 302.51" fill="#d2d6e6" fill-rule="evenodd"/>
 
            <path d="M41,304.86l.4-.26s.27-.71.09-.54a2.27,2.27,0,0,1-.75.32l.26.48" fill="#d2d6e6" fill-rule="evenodd"/>
 
            <path d="M23.81,300.75a18.5,18.5,0,0,1-2.95-1.44,1,1,0,0,0,0,.53,12.22,12.22,0,0,0,2.53,1.21c.9.37.46-.31.46-.31Z" fill="#d2d6e6" fill-rule="evenodd"/>
 
            <path d="M23.36,303.49a12.34,12.34,0,0,1-2.64-1.16,1.29,1.29,0,0,1,0-.48A12.09,12.09,0,0,0,23.34,303c1.4.44,0,.47,0,.47" fill="#d2d6e6" fill-rule="evenodd"/>
 
        </g>
 
        <g id="Layer_2-2" data-name="Layer 2">
 
            <path d="M23.8,300.69a9.58,9.58,0,0,0,4.57,1.2c1.77-.1,4.88-2.08,5.55-2.35.9-.36,4.65,2.48,5.76,2.66a2.2,2.2,0,0,0,1.64-.23,9.35,9.35,0,0,1-.36,2.88c-.94,1.27-4.34,4.35-5.94,4.38-3.63.11-10.85-5.12-11.72-5.74C23,303.27,23.48,301.13,23.8,300.69Z" fill="#4bb9ea" fill-rule="evenodd"/>
 
            <path d="M24.34,301.8s5.32,1.88,7,1.73,3.59-.41,3.85-.4a19.32,19.32,0,0,0,2.8.36,11.33,11.33,0,0,0,3.1-1,11.44,11.44,0,0,1-3,1.38c-.88,0-2-.27-3.44-.23-1,0-1.64.18-3.1.23S24.34,301.8,24.34,301.8Z" fill="#488fba" fill-rule="evenodd"/>
 
            <path d="M24.12,302.25s7.31,3.06,9,2.85,1.91.35,3-.05,3.81-1.33,4.35-1.51a31.94,31.94,0,0,1-4.31,2,10.63,10.63,0,0,1-2.39.14A43.2,43.2,0,0,1,24.12,302.25Z" fill="#488fba" fill-rule="evenodd"/>
 
            <path d="M23.89,302.78s5.15,2.57,6.21,2.92,3.28,1.47,4.61,1.38,3.9-1.73,4.52-2.19,1.42-1,1.42-1-1.19,1.2-1.86,1.77-2.88,2.09-3.68,2a12.29,12.29,0,0,1-3.81-1C29.22,305.78,24.12,302.91,23.89,302.78Z" fill="#488fba" fill-rule="evenodd"/>
 
            <path d="M24.38,301.4s3.95,1.16,5.32,1,2.93-.8,3.68-.8,1.33-.49,2.44-.13,2.44,1.11,3.28,1.06l1.6-.09a2.71,2.71,0,0,1-2.07.4c-1.2-.26-2.09-.88-3.2-.88a11.65,11.65,0,0,0-3.59.26,5.75,5.75,0,0,1-2.48.58C28.59,302.73,24.47,301.4,24.38,301.4Z" fill="#488fba" fill-rule="evenodd"/>
 
        </g>
 
        <rect width="297.64" height="85.55" fill="#faa61a"/>
 
        <path d="M56.93,70.26a10.37,10.37,0,0,1-4-3.87,11.2,11.2,0,0,1,0-11,10.37,10.37,0,0,1,4-3.87,12,12,0,0,1,11.29,0,10.25,10.25,0,0,1,4,3.85,11.32,11.32,0,0,1,0,11.05,10.25,10.25,0,0,1-4,3.85,12,12,0,0,1-11.29,0ZM67.4,69a8.92,8.92,0,0,0,3.4-3.36,9.83,9.83,0,0,0,0-9.56,9,9,0,0,0-3.4-3.35,10.27,10.27,0,0,0-9.67,0,9,9,0,0,0-3.41,3.35,9.76,9.76,0,0,0,0,9.56A9,9,0,0,0,57.73,69a10.27,10.27,0,0,0,9.67,0Z" fill="#fff"/>
 
        <path d="M96.29,50.27V71.52H95L80.54,53.06V71.52H79V50.27H80.3L94.75,68.72V50.27Z" fill="#fff"/>
 
        <path d="M103.7,50.27h1.55V70.12h12.23v1.4H103.7Z" fill="#fff"/>
 
        <path d="M121.45,50.27H123V71.52h-1.55Z" fill="#fff"/>
 
        <path d="M147.71,50.27V71.52h-1.28L132,53.06V71.52h-1.54V50.27h1.3l14.45,18.45V50.27Z" fill="#fff"/>
 
        <path d="M169.77,70.12v1.4H155.11V50.27h14.21v1.4H156.66V60H168v1.37H156.66v8.71Z" fill="#fff"/>
 
        <path d="M193,69.37v1.89H178.47V69.75l8.63-8.44a11.19,11.19,0,0,0,2.2-2.77,5.23,5.23,0,0,0,.58-2.36,3.49,3.49,0,0,0-1.26-2.86,5.59,5.59,0,0,0-3.6-1,7.12,7.12,0,0,0-5.66,2.31l-1.51-1.3a7.87,7.87,0,0,1,3.1-2.19,11,11,0,0,1,4.25-.77,7.8,7.8,0,0,1,5,1.49A5,5,0,0,1,192.07,56a7,7,0,0,1-.71,3.08,12.93,12.93,0,0,1-2.69,3.41l-7,6.93Z" fill="#231f20"/>
 
        <path d="M199.55,70.17a8.37,8.37,0,0,1-2.93-3.66,13.85,13.85,0,0,1-1.05-5.62,13.83,13.83,0,0,1,1.05-5.61,8.37,8.37,0,0,1,2.93-3.66,7.86,7.86,0,0,1,8.57,0,8.46,8.46,0,0,1,2.94,3.66,13.66,13.66,0,0,1,1.07,5.61,13.68,13.68,0,0,1-1.07,5.62,8.46,8.46,0,0,1-2.94,3.66,7.86,7.86,0,0,1-8.57,0ZM207,68.48a6.55,6.55,0,0,0,2.15-2.93,14.46,14.46,0,0,0,0-9.31A6.55,6.55,0,0,0,207,53.31a5.53,5.53,0,0,0-6.37,0,6.55,6.55,0,0,0-2.15,2.93,14.46,14.46,0,0,0,0,9.31,6.55,6.55,0,0,0,2.15,2.93,5.53,5.53,0,0,0,6.37,0Z" fill="#231f20"/>
 
        <path d="M229.28,69.37v1.89H214.74V69.75l8.62-8.44a11.52,11.52,0,0,0,2.21-2.77,5.35,5.35,0,0,0,.57-2.36,3.49,3.49,0,0,0-1.26-2.86,5.59,5.59,0,0,0-3.6-1,7.12,7.12,0,0,0-5.66,2.31l-1.51-1.3a7.94,7.94,0,0,1,3.1-2.19,11,11,0,0,1,4.25-.77,7.8,7.8,0,0,1,5,1.49A5,5,0,0,1,228.33,56a7,7,0,0,1-.71,3.08,12.93,12.93,0,0,1-2.69,3.41l-7.05,6.93Z" fill="#231f20"/>
 
        <path d="M246.11,69.37v1.89H231.56V69.75l8.63-8.44a11.19,11.19,0,0,0,2.2-2.77,5.23,5.23,0,0,0,.58-2.36,3.49,3.49,0,0,0-1.26-2.86,5.59,5.59,0,0,0-3.6-1,7.12,7.12,0,0,0-5.66,2.31l-1.51-1.3a7.87,7.87,0,0,1,3.1-2.19,11,11,0,0,1,4.25-.77,7.8,7.8,0,0,1,5,1.49A5,5,0,0,1,245.16,56a7,7,0,0,1-.71,3.08,12.93,12.93,0,0,1-2.69,3.41l-7,6.93Z" fill="#231f20"/>
 
        <path d="M8.41,14.31h2v25.2H25.9v1.77H8.41Z" fill="#fff"/>
 
        <path d="M31,14.31h2v27H31Z" fill="#fff"/>
 
        <path d="M64.27,14.31v27H62.65L44.28,17.86V41.28h-2v-27H44L62.31,37.74V14.31Z" fill="#fff"/>
 
        <path d="M76.27,38.51q-2.83-3-2.83-8.67V14.31h2V29.76c0,3.32.75,5.79,2.27,7.44s3.71,2.46,6.59,2.46a8.48,8.48,0,0,0,6.55-2.46c1.51-1.65,2.27-4.12,2.27-7.44V14.31h2V29.84q0,5.7-2.85,8.67c-1.9,2-4.56,3-8,3S78.16,40.49,76.27,38.51Z" fill="#fff"/>
 
        <path d="M120.75,41.28,111.47,28.8l-9.25,12.48H99.91l10.36-13.91-9.63-13.06H103l8.59,11.6,8.6-11.6h2.19l-9.63,13,10.36,14Z" fill="#fff"/>
 
        <path d="M131.87,39.7a13.08,13.08,0,0,1-5-4.89,13.6,13.6,0,0,1-1.83-7,13.64,13.64,0,0,1,1.83-7,13.08,13.08,0,0,1,5-4.89A14.43,14.43,0,0,1,139,14.12a15,15,0,0,1,5.4.94,11.12,11.12,0,0,1,4.2,2.8l-1.24,1.27a11.27,11.27,0,0,0-8.28-3.2,12.43,12.43,0,0,0-6.16,1.54,11.37,11.37,0,0,0-4.36,4.26A11.87,11.87,0,0,0,127,27.8a11.92,11.92,0,0,0,1.58,6.07,11.34,11.34,0,0,0,4.36,4.25,12.43,12.43,0,0,0,6.16,1.54,11.31,11.31,0,0,0,8.28-3.23l1.24,1.27a11.3,11.3,0,0,1-4.22,2.81,14.82,14.82,0,0,1-5.38,1A14.43,14.43,0,0,1,131.87,39.7Z" fill="#231f20"/>
 
        <path d="M208.86,14.31v27h-1.61L188.87,17.86V41.28h-2v-27h1.66L206.9,37.74V14.31Z" fill="#231f20"/>
 
        <path d="M220.23,16.08V27.6H234.6v1.78H220.23v11.9h-2v-27h18v1.77Z" fill="#231f20"/>
 
        <path d="M258,33.69H242.3l-3.42,7.59h-2.12l12.4-27h2l12.4,27h-2.12ZM257.21,32l-7.08-15.56-7,15.56Z" fill="#fff"/>
 
        <path d="M270.45,38.51q-2.83-3-2.83-8.67V14.31h2V29.76c0,3.32.76,5.79,2.27,7.44a10,10,0,0,0,13.14,0c1.52-1.65,2.28-4.12,2.28-7.44V14.31h2V29.84q0,5.7-2.85,8.67c-1.9,2-4.56,3-8,3S272.34,40.49,270.45,38.51Z" fill="#fff"/>
 
        <path d="M170.22,14.32a13,13,0,0,0-7,.09,14.2,14.2,0,0,0-3.87,1.8l1.32,1.33a11.75,11.75,0,0,1,2.93-1.28,11.43,11.43,0,0,1,6.06,0,12.45,12.45,0,0,1,8.58,8.59,11.34,11.34,0,0,1,0,6.06,12.95,12.95,0,0,1-8.68,8.67,11.27,11.27,0,0,1-6.07.06A12.46,12.46,0,0,1,154.86,31a11.31,11.31,0,0,1,0-6.08A11.64,11.64,0,0,1,156.2,22l-1.33-1.32a13.5,13.5,0,0,0-1.78,3.88,13.22,13.22,0,0,0-.09,7,14.22,14.22,0,0,0,9.87,9.86,13.18,13.18,0,0,0,7-.08,14.36,14.36,0,0,0,6.34-3.8A14.52,14.52,0,0,0,180,31.25a13.08,13.08,0,0,0,.1-7,14.36,14.36,0,0,0-9.92-9.91Z" fill="#231f20"/>
 
    </g>
 
    <g id="Attendee_Text" data-name="Attendee Text">
 
        <text transform="translate(148 148.07)" font-size="18" fill="#231f20" font-family="Montserrat-Light, Montserrat" font-weight="300" text-anchor="middle">
 
            <tspan letter-spacing="0em">{{ user.attendee.attendeeprofilebase.attendeeprofile.name }}</tspan>
 
        </text>
 
        <text transform="translate(148 180.95)" font-size="16" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro" text-anchor="middle">
 
            <tspan letter-spacing="0em">{% if ticket_type == "Student" or ticket_type == "Hobbyist" or "Only" in ticket_type %}{% else %}{{ user.attendee.attendeeprofilebase.attendeeprofile.company }}{% endif %}</tspan>
 
        </text>
 
        <text transform="translate(148 212.18)" font-size="{% if user.attendee.attendeeprofilebase.attendeeprofile.free_text_1|length > 40 %}8{% else %}10{% endif %}" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro" text-anchor="middle">
 
            <tspan letter-spacing="0em">{{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_1 }}</tspan>
 
        </text>
 
        <text transform="translate(148 231.37)" font-size="{% if user.attendee.attendeeprofilebase.attendeeprofile.free_text_2|length > 40 %}8{% else %}10{% endif %}" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro" text-anchor="middle">
 
            <tspan letter-spacing="0em">{{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_2 }}</tspan>
 
        </text>
 
        <text transform="translate(148 340.28)" font-size="16" fill="#ffffff" font-family="Montserrat-Light, Montserrat" font-weight="300" text-anchor="middle">
 
            <tspan letter-spacing="0em">{{ ticket_type|upper }}</tspan>
 
        </text>
 
    </g>
 
</svg>

Changeset was too big and was cut off... Show full diff anyway

0 comments (0 inline, 0 general)