├── .github └── workflows │ └── latex.yml ├── .gitignore ├── Gemfile ├── Makefile ├── README.md ├── computation ├── calc.py ├── calc_integration_test.py ├── calc_unit_test.py └── java │ ├── cc │ ├── Cheating.java │ ├── DoWhileStatement.java │ ├── ElseIfStatement.java │ ├── ForStatement.java │ ├── IfStatement.java │ ├── LogicAndOperator.java │ ├── README.md │ ├── SwitchCaseStatement.java │ ├── TernaryOperator.java │ ├── TryCatchCatch.java │ ├── WhileStatement.java │ ├── WithoutBranches.java │ ├── checks.xml │ └── checkstyle.jar │ └── names │ └── FirstTest.java ├── draw.rb ├── find-repos.rb ├── paper ├── .latexmkrc ├── acmart.cls ├── article.tex ├── graph.tex ├── main.bib └── total.tex └── requirements.txt /.github/workflows/latex.yml: -------------------------------------------------------------------------------- 1 | name: latex 2 | on: [push] 3 | jobs: 4 | latex: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Set up Git repository 8 | uses: actions/checkout@v1 9 | - name: Compile LaTeX document 10 | uses: xu-cheng/latex-action@master 11 | with: 12 | working_directory: paper 13 | root_file: article.tex 14 | args: -pdf -file-line-error -interaction=nonstopmode -shell-escape 15 | - name: Set env 16 | if: github.ref == 'refs/heads/master' 17 | run: echo ::set-env name=GITHUB_SHA_SHORT::$(echo $GITHUB_SHA | cut -c 1-6) 18 | - name: Create Release 19 | if: github.ref == 'refs/heads/master' 20 | id: create_release 21 | uses: actions/create-release@v1 22 | env: 23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | with: 25 | tag_name: ${{ env.GITHUB_SHA_SHORT }} 26 | release_name: Release ${{ env.GITHUB_SHA_SHORT }} 27 | body: Auto-generated release 28 | draft: false 29 | prerelease: false 30 | - name: Upload Release Asset 31 | if: github.ref == 'refs/heads/master' 32 | id: upload-release-asset 33 | uses: actions/upload-release-asset@v1.0.1 34 | env: 35 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 36 | with: 37 | upload_url: ${{ steps.create_release.outputs.upload_url }} 38 | asset_path: ./paper/article.pdf 39 | asset_name: article.pdf 40 | asset_content_type: application/pdf 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | clones 2 | clones/ 3 | repos.txt 4 | summary.csv 5 | article.pdf 6 | *.aux 7 | *.fdb_latexmk 8 | *.fls 9 | *.out 10 | *.vtc 11 | .DS_Store 12 | *.log 13 | *.bbl 14 | *.blg 15 | *.m 16 | __pycache__/ 17 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | # 3 | # Copyright (c) 2020 Yegor Bugayenko 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included 13 | # in all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | source 'https://rubygems.org' 24 | ruby '~>2.6' 25 | 26 | gem 'octokit', '4.18.0' 27 | gem 'slop', '4.6.0' 28 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | # 3 | # Copyright (c) 2020 Yegor Bugayenko 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included 13 | # in all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | SHELL := /bin/bash 24 | all: install search clone calc summary draw article 25 | 26 | install: 27 | bundle update 28 | python3 -m pip install -r requirements.txt 29 | 30 | clean: 31 | rm -rf *.tex 32 | rm -rf repos.txt 33 | rm -rf summary.csv 34 | rm -rf clones 35 | cd paper; latexmk -c 36 | 37 | search: 38 | ruby find-repos.rb | tee repos.txt 39 | 40 | clone: 41 | while read line; do \ 42 | p="clones/$${line}"; \ 43 | if [ -e "$${p}/.git" ]; then \ 44 | echo "$${p} already here"; \ 45 | else \ 46 | mkdir -p "$${p}"; \ 47 | git clone --depth=1 "https://github.com/$${line}" "$${p}"; \ 48 | fi \ 49 | done < repos.txt 50 | 51 | uncalc: 52 | rm -rf metrics 53 | 54 | calc_test: 55 | python3 computation/calc_unit_test.py 56 | python3 computation/calc_integration_test.py 57 | 58 | calc: 59 | mkdir -p metrics 60 | for r in $$(find clones/ -type d -maxdepth 2 ); do \ 61 | d="metrics/$${r/clones\/\//}"; \ 62 | if [ -e "$${d}" ]; then \ 63 | echo "Dir with metrics already here: $${d}"; \ 64 | else \ 65 | mkdir -p "$${d}"; \ 66 | for f in $$(find $${r} -name '*.java'); do \ 67 | m="metrics/$${f/clones\/\//}.m"; \ 68 | mkdir -p $$(dirname "$${m}"); \ 69 | if [ ! -e "$${m}" ]; then \ 70 | python3 computation/calc.py "$${f}" > "$${m}"; \ 71 | fi \ 72 | done; \ 73 | echo "$$(find $${d} -type f | wc -l) Java classes analyzed into $${d}"; \ 74 | fi; \ 75 | done 76 | 77 | summary: 78 | s="summary.csv"; \ 79 | rm -rf $${s}; \ 80 | touch $${s}; \ 81 | for f in $$(find metrics -name '*.m'); do \ 82 | cat "$${f}" >> $${s}; \ 83 | done; \ 84 | echo "$$(wc -l < $${s}) methods measured, the summary is in $${s}"; \ 85 | 86 | draw: summary.csv 87 | ruby draw.rb --summary=summary.csv > paper/graph.tex 88 | 89 | paper/total.tex: 90 | rm -f paper/total.tex 91 | echo "\\\def\\\thetotalrepos{$$(find metrics -name 'files.m' | wc -l)}" > paper/total.tex 92 | 93 | article: paper/article.tex paper/total.tex 94 | cd paper; rm -f article.pdf; latexmk -pdf article 95 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![latex](https://github.com/yegor256/names-vs-complexity/workflows/latex/badge.svg)](https://github.com/yegor256/names-vs-complexity/actions?query=latex) 2 | [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/names-vs-complexity/blob/master/LICENSE.txt) 3 | 4 | Hypothesis: Java methods that contain variables with 5 | [compound names](https://www.yegor256.com/2015/01/12/compound-name-is-code-smell.html) 6 | tend to have larger 7 | [cyclomatic complexity](https://en.wikipedia.org/wiki/Cyclomatic_complexity). 8 | 9 | Method: 10 | 11 | * We take many big and popular Java repositories from GitHub 12 | * For each Java method we calculate: CC and count of compounds vars 13 | * We draw a graph: _x_ is CC, _y_ is the count 14 | * We make a conclusion about a correlation between them two 15 | 16 | The results of this research will be published. 17 | -------------------------------------------------------------------------------- /computation/calc.py: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | # 3 | # Copyright (c) 2020 Yegor Bugayenko 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included 13 | # in all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | import sys 24 | import re 25 | from javalang import tree, parse 26 | 27 | """Determines the number of branches for a node 28 | according to the Extended Cyclomatic Complexity metric. 29 | Binary operations (&&, ||) and each case statement are taken into account. 30 | 31 | :param node: class provided by the parser and targeted to Java 8 spec 32 | :returns: number 33 | """ 34 | def branches(node): 35 | count = 0 36 | if (isinstance(node, tree.BinaryOperation)): 37 | if(node.operator == '&&' or node.operator == '||'): 38 | count = 1 39 | elif(isinstance(node, ( 40 | tree.ForStatement, 41 | tree.IfStatement, 42 | tree.WhileStatement, 43 | tree.DoStatement, 44 | tree.TernaryExpression 45 | ))): 46 | count = 1 47 | elif(isinstance(node, tree.SwitchStatementCase)): 48 | count = len(node.case) 49 | elif(isinstance(node, tree.TryStatement)): 50 | count = len(node.catches) 51 | return count 52 | 53 | """Check the name for compound inside the methods (i.e. for local variables) 54 | 55 | :param node: class provided by the parser and targeted to Java 8 spec 56 | :returns: boolean 57 | """ 58 | def compound(node): 59 | flag = False 60 | if (isinstance(node, tree.LocalVariableDeclaration)): 61 | name = node.declarators[0].name 62 | flag = len(re.findall(r'(?:[a-z][A-Z]+)|(?:[_])', name)) != 0 63 | return flag 64 | 65 | 66 | java = sys.argv[1] 67 | with open(java, encoding='utf-8') as f: 68 | try: 69 | cc = 1 70 | names = 0 71 | ast = parse.parse(f.read()) 72 | for path, node in ast: 73 | cc += branches(node) 74 | names += int(compound(node)) 75 | print(str(cc) + ',' + str(names)) 76 | except Exception as e: 77 | sys.exit(str(e) + ': ' + java) 78 | -------------------------------------------------------------------------------- /computation/calc_integration_test.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import unittest 4 | import javalang 5 | from glob import glob 6 | import re 7 | 8 | try: 9 | from unittest.mock import patch 10 | except ImportError: 11 | from mock import patch 12 | 13 | fileDir = os.path.dirname(os.path.realpath(__file__)) 14 | testargs = ["", os.path.join(fileDir, 'java/cc/SwitchCaseStatement.java')] 15 | with patch.object(sys, 'argv', testargs): 16 | from calc import branches, compound 17 | 18 | def cc(tree): 19 | var = next(tree.filter(javalang.tree.VariableDeclarator))[1] 20 | if (var.name != 'cc'): 21 | raise ValueError('file not tested') 22 | return int(var.initializer.value) 23 | 24 | def names(ast): 25 | comment = next(ast.filter(javalang.tree.Documented))[1] 26 | return int(re.search(r'[\d]+', comment.documentation).group(0)) 27 | 28 | for java in glob(os.path.join(fileDir, 'java/names/*.java')): 29 | with open(java, encoding='utf-8') as f: 30 | try: 31 | ast = javalang.parse.parse(f.read()) 32 | receivedNames = 0 33 | expectedNames = names(ast) 34 | 35 | for path, node in ast: 36 | receivedNames += compound(node) 37 | 38 | if (receivedNames != expectedNames): 39 | raise Exception('\nTest failed. Expected ' + str(expectedNames) + ', received ' + str(receivedNames)) 40 | except Exception as e: 41 | sys.exit(str(e) + ': ' + java) 42 | 43 | for java in glob(os.path.join(fileDir, 'java/cc/*.java')): 44 | with open(java, encoding='utf-8') as f: 45 | try: 46 | ast = javalang.parse.parse(f.read()) 47 | receivedCC = 1 48 | expectedCC = cc(ast) 49 | 50 | for path, node in ast: 51 | receivedCC += branches(node) 52 | 53 | if (receivedCC != expectedCC): 54 | raise Exception('\nTest failed. Expected ' + str(expectedCC) + ', received ' + str(receivedCC)) 55 | 56 | print('.', end='', flush=True), 57 | except Exception as e: 58 | sys.exit(str(e) + ': ' + java) 59 | 60 | print('\nOK') 61 | 62 | -------------------------------------------------------------------------------- /computation/calc_unit_test.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import unittest 4 | import javalang 5 | 6 | try: 7 | from unittest.mock import patch 8 | except ImportError: 9 | from mock import patch 10 | 11 | fileDir = os.path.dirname(os.path.realpath(__file__)) 12 | testargs = ["", os.path.join(fileDir, 'java/cc/SwitchCaseStatement.java')] 13 | with patch.object(sys, 'argv', testargs): 14 | from calc import branches, compound 15 | 16 | class TestCalc(unittest.TestCase): 17 | def test_for_statement_count(self): 18 | code = """ 19 | for (int i = 0; i < amounts.length; i++) { 20 | result += amounts[i]; 21 | } 22 | """ 23 | node = self.statement(code) 24 | self.assertEqual(branches(node), 1) 25 | 26 | def test_branch_not_count(self): 27 | code = "nextKey = new BlockKey(serialNo, System.currentTimeMillis() + 3.0);" 28 | node = self.expression(code) 29 | self.assertEqual(branches(node), 0) 30 | 31 | def test_if_statement_count(self): 32 | code = """ 33 | if (itr == '\r') { 34 | int status = 1; 35 | } 36 | """ 37 | node = self.statement(code) 38 | self.assertEqual(branches(node), 1) 39 | 40 | def test_while_statement_count(self): 41 | code = """ 42 | while (i < 5) { 43 | System.out.println(i); 44 | i++; 45 | } 46 | """ 47 | node = self.statement(code) 48 | self.assertEqual(branches(node), 1) 49 | 50 | def test_do_statement_count(self): 51 | code = """ 52 | do 53 | a-- ; 54 | while ( a ); 55 | """ 56 | node = self.statement(code) 57 | self.assertEqual(branches(node), 1) 58 | 59 | def test_switch_statement_count(self): 60 | code = """ 61 | switch ( a ) 62 | { 63 | case 1: 64 | return ; 65 | } 66 | """ 67 | node = self.statement(code) 68 | self.assertEqual(branches(node.cases[0]), 1) 69 | 70 | def test_logic_and_operator_count(self): 71 | code = 'if ( a && b ) {}' 72 | ifNode = self.statement(code) 73 | self.assertEqual(branches(ifNode.children[1]), 1) 74 | 75 | def test_logic_or_operator_count(self): 76 | code = 'if ( a || b ) {}' 77 | ifNode = self.statement(code) 78 | self.assertEqual(branches(ifNode.children[1]), 1) 79 | 80 | def test_logic_operator_not_count(self): 81 | code = 'if ( a > b ) {}' 82 | ifNode = self.statement(code) 83 | self.assertEqual(branches(ifNode.children[1]), 0) 84 | 85 | def test_ternary_operator(self): 86 | code = 'value == "uppercase" ? "JOHN" : "john";' 87 | node = self.expression(code); 88 | self.assertEqual(branches(node), 1) 89 | 90 | def test_catch_statements(self): 91 | code = """ 92 | try { 93 | Throwable t = new Exception(); 94 | throw t; 95 | } catch (RuntimeException e) { 96 | System.err.println("catch RuntimeException"); 97 | } catch (Exception e) { 98 | System.err.println("catch Exception"); 99 | } catch (Throwable e) { 100 | System.err.println("catch Throwable"); 101 | } 102 | System.err.println("next statement"); 103 | """ 104 | node = self.statement(code) 105 | self.assertEqual(branches(node), 3) 106 | 107 | def test_compound_with_camel_and_snake_cases(self): 108 | for s in ['camelCase', 'CamelCase', 'camelCASE', 'snake_case', 'snake_CASE', 'SNAKE_CASE', 'SNAKE_case']: 109 | code = "int %s = 0;" % (s) 110 | node = self.parser(code).parse_local_variable_declaration_statement() 111 | self.assertEqual(compound(node), 1) 112 | 113 | def test_compound_without_camel_and_snake_cases(self): 114 | for s in ['camelcase, CAMELCASE, Camelcase']: 115 | code = "int %s = 0;" % (s) 116 | node = self.parser(code).parse_local_variable_declaration_statement() 117 | self.assertEqual(compound(node), 0) 118 | 119 | def expression(self, code): 120 | return self.parser(code).parse_expression() 121 | 122 | def statement(self, code): 123 | return self.parser(code).parse_statement() 124 | 125 | def parser(self, code): 126 | return javalang.parser.Parser( 127 | javalang.tokenizer.tokenize(code) 128 | ) 129 | 130 | if __name__ == '__main__': 131 | unittest.main() 132 | -------------------------------------------------------------------------------- /computation/java/cc/Cheating.java: -------------------------------------------------------------------------------- 1 | class Cheating { 2 | public int cc = 1; 3 | 4 | public boolean foo(Account account, int amount) { 5 | boolean result = true; 6 | result &= account.getBalance() >= amount; 7 | result &= !account.isLocked(); 8 | return result; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /computation/java/cc/DoWhileStatement.java: -------------------------------------------------------------------------------- 1 | class DoWhileStatement { 2 | public int cc = 2; 3 | 4 | void foo( int a ) { 5 | do 6 | a-- ; 7 | while ( a ); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /computation/java/cc/ElseIfStatement.java: -------------------------------------------------------------------------------- 1 | class ElseIfStatement { 2 | public int cc = 3; 3 | 4 | public boolean checkWithdrawal() { 5 | boolean result = false; 6 | if (account.getBalance() >= amount) { 7 | result = true; 8 | } else if (account.isLocked()) { 9 | result = false; 10 | } 11 | return result; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /computation/java/cc/ForStatement.java: -------------------------------------------------------------------------------- 1 | public class ForStatement { 2 | public int cc = 2; 3 | 4 | public int sum(int[] amounts) { 5 | int result = 0; 6 | for (int i = 0; i < amounts.length; i++) { 7 | result += amounts[i]; 8 | } 9 | return result; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /computation/java/cc/IfStatement.java: -------------------------------------------------------------------------------- 1 | class IfStatement { 2 | public int cc = 3; 3 | 4 | public boolean checkWithdrawal() { 5 | boolean result = false; 6 | if (account.getBalance() >= amount) { 7 | result = true; 8 | } 9 | if (account.isLocked()) { 10 | result = false; 11 | } 12 | return result; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /computation/java/cc/LogicAndOperator.java: -------------------------------------------------------------------------------- 1 | class LogicAndOperator { 2 | public int cc = 3; 3 | 4 | public boolean checkWithdrawal(Account acc, int amount) { 5 | if (!acc.isLocked() && acc.getBalance() >= amount) { 6 | return true; 7 | } 8 | return false; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /computation/java/cc/README.md: -------------------------------------------------------------------------------- 1 | ###### To run a checkstyle try command **java -jar checkstyle.jar -c checks.xml $(find . -name '*.java')** 2 | -------------------------------------------------------------------------------- /computation/java/cc/SwitchCaseStatement.java: -------------------------------------------------------------------------------- 1 | class SwitchCaseStatement { 2 | public int cc = 4; 3 | 4 | void foo( int a ) { 5 | switch ( a ) 6 | { 7 | case 1: 8 | return ; 9 | case 2: 10 | case 3: 11 | return ; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /computation/java/cc/TernaryOperator.java: -------------------------------------------------------------------------------- 1 | class TernaryOperator { 2 | public int cc = 2; 3 | 4 | public boolean foo(String value) { 5 | return value == "" ? true : false; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /computation/java/cc/TryCatchCatch.java: -------------------------------------------------------------------------------- 1 | public class TryCatchCatch { 2 | private int cc = 4; 3 | 4 | void foo() { 5 | try { 6 | throw new Exception(); 7 | } catch (RuntimeException e) { 8 | System.err.println("catch RuntimeException"); 9 | } catch (Exception e) { 10 | System.err.println("catch Exception"); 11 | } catch (Throwable e) { 12 | System.err.println("catch Throwable"); 13 | } 14 | System.err.println("next statement"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /computation/java/cc/WhileStatement.java: -------------------------------------------------------------------------------- 1 | class WhileStatement { 2 | public int cc = 2; 3 | 4 | void foo( int a ) { 5 | while ( a ) 6 | a-- ; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /computation/java/cc/WithoutBranches.java: -------------------------------------------------------------------------------- 1 | public class WithoutBranches { 2 | public int cc = 1; 3 | 4 | public int sum(int a, int b) { 5 | return a + b; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /computation/java/cc/checks.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /computation/java/cc/checkstyle.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yegor256/names-vs-complexity/f3493b8411a1b9ed28537a0fd8806c3642e29185/computation/java/cc/checkstyle.jar -------------------------------------------------------------------------------- /computation/java/names/FirstTest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 3 | * */ 4 | public class FirstTest { 5 | public int thisVariableNotTaken = 0; 6 | public static final boolean this_variable_not_taken_too; 7 | 8 | public static void main(String args[]) { 9 | final Test1 compoundNameOne = new Test1(); 10 | boolean COUMPOUND_NAME_TWO = false; 11 | String anotherOne; 12 | int a0$ = 0; 13 | int nottaken = 0; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /draw.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # The MIT License (MIT) 3 | # 4 | # Copyright (c) 2020 Yegor Bugayenko 5 | # 6 | # Permission is hereby granted, free of charge, to any person obtaining a copy 7 | # of this software and associated documentation files (the "Software"), to deal 8 | # in the Software without restriction, including without limitation the rights 9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | # copies of the Software, and to permit persons to whom the Software is 11 | # furnished to do so, subject to the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be included 14 | # in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | # SOFTWARE. 23 | 24 | require 'slop' 25 | require 'csv' 26 | 27 | opts = Slop.parse(ARGV, strict: true, help: true) do |o| 28 | o.integer '--width', default: 9 29 | o.integer '--height', default: 5 30 | o.string '--xlabel', default: 'CC' 31 | o.string '--ylabel', default: 'Vars' 32 | o.string '--summary', default: 'summary.csv' 33 | end 34 | 35 | points = [] 36 | 37 | CSV.read(opts[:summary]).each do |r| 38 | points << { x: r[0], y: r[1] } 39 | end 40 | 41 | points = points.uniq 42 | 43 | ymax = points.map { |p| p[:y] }.max 44 | xmax = points.map { |p| p[:x] }.max 45 | 46 | puts '\begin{tikzpicture}' 47 | puts "\\begin{axis}[width=#{opts[:width]}cm,height=#{opts[:height]}cm," 48 | puts "axis lines=middle, xlabel={$#{opts[:xlabel]}$}, ylabel={$#{opts[:ylabel]}$}," 49 | puts "xmin=#{points.map { |p| p[:x] }.min}, xmax=#{xmax}," 50 | puts "ymin=#{points.map { |p| p[:y] }.min}, ymax=#{ymax}," 51 | puts "extra tick style={major grid style=black},grid=major]" 52 | puts "\\addplot [mark=*, only marks, mark size=0.8pt] coordinates {" 53 | points.each do |p| 54 | puts "(#{p[:x]},#{p[:y]})" 55 | end 56 | puts "};" 57 | puts '\end{axis}\end{tikzpicture}' 58 | -------------------------------------------------------------------------------- /find-repos.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # The MIT License (MIT) 3 | # 4 | # Copyright (c) 2020 Yegor Bugayenko 5 | # 6 | # Permission is hereby granted, free of charge, to any person obtaining a copy 7 | # of this software and associated documentation files (the "Software"), to deal 8 | # in the Software without restriction, including without limitation the rights 9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | # copies of the Software, and to permit persons to whom the Software is 11 | # furnished to do so, subject to the following conditions: 12 | # 13 | # The above copyright notice and this permission notice shall be included 14 | # in all copies or substantial portions of the Software. 15 | # 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | # SOFTWARE. 23 | 24 | STDOUT.sync = true 25 | 26 | require 'octokit' 27 | 28 | github = Octokit::Client.new 29 | (0..50).each do |p| 30 | json = github.search_repositories('stars:>=1000 size:>200 language:java is:public mirror:false archived:false', page: p) 31 | json[:items].each do |i| 32 | puts i[:full_name] 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /paper/.latexmkrc: -------------------------------------------------------------------------------- 1 | $latex = 'latex %O --shell-escape %S'; 2 | $pdflatex = 'pdflatex %O --shell-escape %S'; 3 | -------------------------------------------------------------------------------- /paper/acmart.cls: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `acmart.cls', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% acmart.dtx (with options: `class') 8 | %% 9 | %% IMPORTANT NOTICE: 10 | %% 11 | %% For the copyright see the source file. 12 | %% 13 | %% Any modified versions of this file must be renamed 14 | %% with new filenames distinct from acmart.cls. 15 | %% 16 | %% For distribution of the original source see the terms 17 | %% for copying and modification in the file acmart.dtx. 18 | %% 19 | %% This generated file may be distributed as long as the 20 | %% original source files, as listed above, are part of the 21 | %% same distribution. (The sources need not necessarily be 22 | %% in the same archive or directory.) 23 | %% \CharacterTable 24 | %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z 25 | %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z 26 | %% Digits \0\1\2\3\4\5\6\7\8\9 27 | %% Exclamation \! Double quote \" Hash (number) \# 28 | %% Dollar \$ Percent \% Ampersand \& 29 | %% Acute accent \' Left paren \( Right paren \) 30 | %% Asterisk \* Plus \+ Comma \, 31 | %% Minus \- Point \. Solidus \/ 32 | %% Colon \: Semicolon \; Less than \< 33 | %% Equals \= Greater than \> Question mark \? 34 | %% Commercial at \@ Left bracket \[ Backslash \\ 35 | %% Right bracket \] Circumflex \^ Underscore \_ 36 | %% Grave accent \` Left brace \{ Vertical bar \| 37 | %% Right brace \} Tilde \~} 38 | \NeedsTeXFormat{LaTeX2e} 39 | \ProvidesClass{acmart} 40 | [2020/02/22 v1.70 Typesetting articles for the Association for Computing Machinery] 41 | \def\@classname{acmart} 42 | \InputIfFileExists{acmart-preload-hook.tex}{% 43 | \ClassWarning{\@classname}{% 44 | I am loading acmart-preload-hook.tex. You are fully responsible 45 | for any problems from now on.}}{} 46 | \RequirePackage{xkeyval} 47 | \RequirePackage{xstring} 48 | \define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{% 49 | manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph, 50 | sigplan, sigchi, sigchi-a}[manuscript]{}{% 51 | \ClassError{\@classname}{The option format must be manuscript, 52 | acmsmall, acmlarge, acmtog, sigconf, siggraph, 53 | sigplan, sigchi or sigchi-a}} 54 | \def\@DeclareACMFormat#1{\DeclareOptionX{#1}{\setkeys{acmart.cls}{format=#1}}} 55 | \@DeclareACMFormat{manuscript} 56 | \@DeclareACMFormat{acmsmall} 57 | \@DeclareACMFormat{acmlarge} 58 | \@DeclareACMFormat{acmtog} 59 | \@DeclareACMFormat{sigconf} 60 | \@DeclareACMFormat{siggraph} 61 | \@DeclareACMFormat{sigplan} 62 | \@DeclareACMFormat{sigchi} 63 | \@DeclareACMFormat{sigchi-a} 64 | \ExecuteOptionsX{format} 65 | \define@boolkey+{acmart.cls}[@ACM@]{screen}[true]{% 66 | \if@ACM@screen 67 | \PackageInfo{\@classname}{Using screen mode}% 68 | \else 69 | \PackageInfo{\@classname}{Not using screen mode}% 70 | \fi}{\PackageError{\@classname}{The option screen can be either true or 71 | false}} 72 | \ExecuteOptionsX{screen=false} 73 | \define@boolkey+{acmart.cls}[@ACM@]{urlbreakonhyphens}[true]{% 74 | \if@ACM@urlbreakonhyphens 75 | \PackageInfo{\@classname}{Using breaking urls on hyphens}% 76 | \else 77 | \PackageInfo{\@classname}{Not breaking urls on hyphens}% 78 | \fi}{\PackageError{\@classname}{The option urlbreakonhyphens can be either true or 79 | false}} 80 | \ExecuteOptionsX{urlbreakonhyphens=true} 81 | \define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{% 82 | \if@ACM@acmthm 83 | \PackageInfo{\@classname}{Requiring acmthm}% 84 | \else 85 | \PackageInfo{\@classname}{Suppressing acmthm}% 86 | \fi}{\PackageError{\@classname}{The option acmthm can be either true or 87 | false}} 88 | \ExecuteOptionsX{acmthm=true} 89 | \define@boolkey+{acmart.cls}[@ACM@]{review}[true]{% 90 | \if@ACM@review 91 | \PackageInfo{\@classname}{Using review mode}% 92 | \AtBeginDocument{\@ACM@printfoliostrue}% 93 | \else 94 | \PackageInfo{\@classname}{Not using review mode}% 95 | \fi}{\PackageError{\@classname}{The option review can be either true or 96 | false}} 97 | \ExecuteOptionsX{review=false} 98 | \define@boolkey+{acmart.cls}[@ACM@]{authorversion}[true]{% 99 | \if@ACM@authorversion 100 | \PackageInfo{\@classname}{Using authorversion mode}% 101 | \else 102 | \PackageInfo{\@classname}{Not using authorversion mode}% 103 | \fi}{\PackageError{\@classname}{The option authorversion can be either true or 104 | false}} 105 | \ExecuteOptionsX{authorversion=false} 106 | \define@boolkey+{acmart.cls}[@ACM@]{nonacm}[true]{% 107 | \if@ACM@nonacm 108 | \PackageInfo{\@classname}{Using nonacm mode}% 109 | \AtBeginDocument{\@ACM@printacmreffalse}% 110 | % in 'nonacm' mode we disable the "ACM Reference Format" 111 | % printing by default, but this can be re-enabled by the 112 | % user using \settopmatter{printacmref=true} 113 | \else 114 | \PackageInfo{\@classname}{Not using nonacm mode}% 115 | \fi}{\PackageError{\@classname}{The option nonacm can be either true or 116 | false}} 117 | \ExecuteOptionsX{nonacm=false} 118 | \define@boolkey+{acmart.cls}[@ACM@]{balance}[true]{}{% 119 | \PackageError{\@classname}{The option balance can be either true or 120 | false}} 121 | \ExecuteOptionsX{balance} 122 | \define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{% 123 | \if@ACM@natbib 124 | \PackageInfo{\@classname}{Explicitly selecting natbib mode}% 125 | \else 126 | \PackageInfo{\@classname}{Explicitly deselecting natbib mode}% 127 | \fi}{\PackageError{\@classname}{The option natbib can be either true or 128 | false}} 129 | \ExecuteOptionsX{natbib=true} 130 | \define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{% 131 | \if@ACM@anonymous 132 | \PackageInfo{\@classname}{Using anonymous mode}% 133 | \else 134 | \PackageInfo{\@classname}{Not using anonymous mode}% 135 | \fi}{\PackageError{\@classname}{The option anonymous can be either true or 136 | false}} 137 | \ExecuteOptionsX{anonymous=false} 138 | \define@boolkey+{acmart.cls}[@ACM@]{timestamp}[true]{% 139 | \if@ACM@timestamp 140 | \PackageInfo{\@classname}{Using timestamp mode}% 141 | \else 142 | \PackageInfo{\@classname}{Not using timestamp mode}% 143 | \fi}{\PackageError{\@classname}{The option timestamp can be either true or 144 | false}} 145 | \ExecuteOptionsX{timestamp=false} 146 | \define@boolkey+{acmart.cls}[@ACM@]{authordraft}[true]{% 147 | \if@ACM@authordraft 148 | \PackageInfo{\@classname}{Using authordraft mode}% 149 | \@ACM@timestamptrue 150 | \@ACM@reviewtrue 151 | \else 152 | \PackageInfo{\@classname}{Not using authordraft mode}% 153 | \fi}{\PackageError{\@classname}{The option authordraft can be either true or 154 | false}} 155 | \ExecuteOptionsX{authordraft=false} 156 | \def\ACM@fontsize{} 157 | \DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}} 158 | \DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}} 159 | \DeclareOptionX{11pt}{\edef\ACM@fontsize{\CurrentOption}} 160 | \DeclareOptionX{12pt}{\edef\ACM@fontsize{\CurrentOption}} 161 | \DeclareOptionX{draft}{\PassOptionsToClass{\CurrentOption}{amsart}} 162 | \DeclareOptionX{*}{\PassOptionsToClass{\CurrentOption}{amsart}} 163 | \ProcessOptionsX 164 | \ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr} 165 | \newif\if@ACM@manuscript 166 | \newif\if@ACM@journal 167 | \newif\if@ACM@journal@bibstrip 168 | \newif\if@ACM@sigchiamode 169 | \ifnum\ACM@format@nr=5\relax % siggraph 170 | \ClassWarning{\@classname}{The format siggraph is now obsolete. 171 | I am switching to sigconf.} 172 | \setkeys{acmart.cls}{format=sigconf} 173 | \fi 174 | \ifnum\ACM@format@nr=0\relax 175 | \@ACM@manuscripttrue 176 | \else 177 | \@ACM@manuscriptfalse 178 | \fi 179 | \@ACM@sigchiamodefalse 180 | \ifcase\ACM@format@nr 181 | \relax % manuscript 182 | \@ACM@journaltrue 183 | \or % acmsmall 184 | \@ACM@journaltrue 185 | \or % acmlarge 186 | \@ACM@journaltrue 187 | \or % acmtog 188 | \@ACM@journaltrue 189 | \or % sigconf 190 | \@ACM@journalfalse 191 | \or % siggraph 192 | \@ACM@journalfalse 193 | \or % sigplan 194 | \@ACM@journalfalse 195 | \or % sigchi 196 | \@ACM@journalfalse 197 | \or % sigchi-a 198 | \@ACM@journalfalse 199 | \@ACM@sigchiamodetrue 200 | \fi 201 | \if@ACM@journal 202 | \@ACM@journal@bibstriptrue 203 | \else 204 | \@ACM@journal@bibstripfalse 205 | \fi 206 | \ifx\ACM@fontsize\@empty 207 | \ifcase\ACM@format@nr 208 | \relax % manuscript 209 | \def\ACM@fontsize{9pt}% 210 | \or % acmsmall 211 | \def\ACM@fontsize{10pt}% 212 | \or % acmlarge 213 | \def\ACM@fontsize{10pt}% 214 | \or % acmtog 215 | \def\ACM@fontsize{9pt}% 216 | \or % sigconf 217 | \def\ACM@fontsize{9pt}% 218 | \or % siggraph 219 | \def\ACM@fontsize{9pt}% 220 | \or % sigplan 221 | \def\ACM@fontsize{10pt}% 222 | \or % sigchi 223 | \def\ACM@fontsize{10pt}% 224 | \or % sigchi-a 225 | \def\ACM@fontsize{10pt}% 226 | \fi 227 | \fi 228 | \ClassInfo{\@classname}{Using fontsize \ACM@fontsize} 229 | \LoadClass[\ACM@fontsize, reqno]{amsart} 230 | \RequirePackage{microtype} 231 | \RequirePackage{etoolbox} 232 | \RequirePackage{booktabs} 233 | \RequirePackage{refcount} 234 | \RequirePackage{totpages} 235 | \RequirePackage{environ} 236 | \if@ACM@manuscript 237 | \RequirePackage{setspace} 238 | \onehalfspacing 239 | \fi 240 | \RequirePackage{textcase} 241 | \if@ACM@natbib 242 | \RequirePackage{natbib} 243 | \renewcommand{\bibsection}{% 244 | \section*{\refname}% 245 | \phantomsection\addcontentsline{toc}{section}{\refname}% 246 | } 247 | \renewcommand{\bibfont}{\bibliofont} 248 | \renewcommand\setcitestyle[1]{ 249 | \@for\@tempa:=#1\do 250 | {\def\@tempb{round}\ifx\@tempa\@tempb 251 | \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi 252 | \def\@tempb{square}\ifx\@tempa\@tempb 253 | \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi 254 | \def\@tempb{angle}\ifx\@tempa\@tempb 255 | \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi 256 | \def\@tempb{curly}\ifx\@tempa\@tempb 257 | \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi 258 | \def\@tempb{semicolon}\ifx\@tempa\@tempb 259 | \renewcommand\NAT@sep{;}\fi 260 | \def\@tempb{colon}\ifx\@tempa\@tempb 261 | \renewcommand\NAT@sep{;}\fi 262 | \def\@tempb{comma}\ifx\@tempa\@tempb 263 | \renewcommand\NAT@sep{,}\fi 264 | \def\@tempb{authoryear}\ifx\@tempa\@tempb 265 | \NAT@numbersfalse\fi 266 | \def\@tempb{numbers}\ifx\@tempa\@tempb 267 | \NAT@numberstrue\NAT@superfalse\fi 268 | \def\@tempb{super}\ifx\@tempa\@tempb 269 | \NAT@numberstrue\NAT@supertrue\fi 270 | \def\@tempb{nobibstyle}\ifx\@tempa\@tempb 271 | \let\bibstyle=\@gobble\fi 272 | \def\@tempb{bibstyle}\ifx\@tempa\@tempb 273 | \let\bibstyle=\@citestyle\fi 274 | \def\@tempb{sort}\ifx\@tempa\@tempb 275 | \def\NAT@sort{\@ne}\fi 276 | \def\@tempb{nosort}\ifx\@tempa\@tempb 277 | \def\NAT@sort{\z@}\fi 278 | \def\@tempb{compress}\ifx\@tempa\@tempb 279 | \def\NAT@cmprs{\@ne}\fi 280 | \def\@tempb{nocompress}\ifx\@tempa\@tempb 281 | \def\NAT@cmprs{\z@}\fi 282 | \def\@tempb{sort&compress}\ifx\@tempa\@tempb 283 | \def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}\fi 284 | \def\@tempb{mcite}\ifx\@tempa\@tempb 285 | \let\NAT@merge\@ne\fi 286 | \def\@tempb{merge}\ifx\@tempa\@tempb 287 | \@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}\fi 288 | \def\@tempb{elide}\ifx\@tempa\@tempb 289 | \@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}\fi 290 | \def\@tempb{longnamesfirst}\ifx\@tempa\@tempb 291 | \NAT@longnamestrue\fi 292 | \def\@tempb{nonamebreak}\ifx\@tempa\@tempb 293 | \def\NAT@nmfmt#1{\mbox{\NAT@up#1}}\fi 294 | \expandafter\NAT@find@eq\@tempa=\relax\@nil 295 | \if\@tempc\relax\else 296 | \expandafter\NAT@rem@eq\@tempc 297 | \def\@tempb{open}\ifx\@tempa\@tempb 298 | \xdef\NAT@open{\@tempc}\fi 299 | \def\@tempb{close}\ifx\@tempa\@tempb 300 | \xdef\NAT@close{\@tempc}\fi 301 | \def\@tempb{aysep}\ifx\@tempa\@tempb 302 | \xdef\NAT@aysep{\@tempc}\fi 303 | \def\@tempb{yysep}\ifx\@tempa\@tempb 304 | \xdef\NAT@yrsep{\@tempc}\fi 305 | \def\@tempb{notesep}\ifx\@tempa\@tempb 306 | \xdef\NAT@cmt{\@tempc}\fi 307 | \def\@tempb{citesep}\ifx\@tempa\@tempb 308 | \xdef\NAT@sep{\@tempc}\fi 309 | \fi 310 | }% 311 | \NAT@@setcites 312 | } 313 | \renewcommand\citestyle[1]{% 314 | \ifcsname bibstyle@#1\endcsname% 315 | \csname bibstyle@#1\endcsname\let\bibstyle\@gobble% 316 | \else% 317 | \@latex@error{Undefined `#1' citestyle}% 318 | \fi 319 | }% 320 | \fi 321 | \newcommand{\bibstyle@acmauthoryear}{% 322 | \setcitestyle{% 323 | authoryear,% 324 | open={[},close={]},citesep={;},% 325 | aysep={},yysep={,},% 326 | notesep={, }}} 327 | \newcommand{\bibstyle@acmnumeric}{% 328 | \setcitestyle{% 329 | numbers,sort&compress,% 330 | open={[},close={]},citesep={,},% 331 | notesep={, }}} 332 | \if@ACM@natbib 333 | \citestyle{acmnumeric} 334 | \fi 335 | \def\@startsection#1#2#3#4#5#6{% 336 | \if@noskipsec \leavevmode \fi 337 | \par 338 | \@tempskipa #4\relax 339 | \@afterindenttrue 340 | \ifdim \@tempskipa <\z@ 341 | \@tempskipa -\@tempskipa \@afterindentfalse 342 | \fi 343 | \if@nobreak 344 | \everypar{}% 345 | \else 346 | \addpenalty\@secpenalty\addvspace\@tempskipa 347 | \fi 348 | \@ifstar 349 | {\@ssect{#3}{#4}{#5}{#6}}% 350 | {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} 351 | \def\@sect#1#2#3#4#5#6[#7]#8{% 352 | \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}% 353 | \ifnum #2>\c@secnumdepth 354 | \let\@svsec\@empty 355 | \else 356 | \refstepcounter{#1}% 357 | \protected@edef\@svsec{\@seccntformat{#1}\relax}% 358 | \fi 359 | \@tempskipa #5\relax 360 | \ifdim \@tempskipa>\z@ 361 | \begingroup 362 | #6{% 363 | \@hangfrom{\hskip #3\relax\@svsec}% 364 | \interlinepenalty \@M #8\@@par}% 365 | \endgroup 366 | \csname #1mark\endcsname{#7}% 367 | \ifnum #2>\c@secnumdepth \else 368 | \@tochangmeasure{\csname the#1\endcsname}% 369 | \fi 370 | \addcontentsline{toc}{#1}{% 371 | \ifnum #2>\c@secnumdepth \else 372 | \protect\numberline{\csname the#1\endcsname}% 373 | \fi 374 | #7}% 375 | \else 376 | \def\@svsechd{% 377 | #6{\hskip #3\relax 378 | \@svsec #8}% 379 | \csname #1mark\endcsname{#7}% 380 | \ifnum #2>\c@secnumdepth \else 381 | \@tochangmeasure{\csname the#1\endcsname\space}% 382 | \fi 383 | \addcontentsline{toc}{#1}{% 384 | \ifnum #2>\c@secnumdepth \else 385 | \protect\numberline{\csname the#1\endcsname}% 386 | \fi 387 | #7}}% 388 | \fi 389 | \@xsect{#5}} 390 | \def\@xsect#1{% 391 | \@tempskipa #1\relax 392 | \ifdim \@tempskipa>\z@ 393 | \par \nobreak 394 | \vskip \@tempskipa 395 | \@afterheading 396 | \else 397 | \@nobreakfalse 398 | \global\@noskipsectrue 399 | \everypar{% 400 | \if@noskipsec 401 | \global\@noskipsecfalse 402 | {\setbox\z@\lastbox}% 403 | \clubpenalty\@M 404 | \begingroup \@svsechd \endgroup 405 | \unskip 406 | \@tempskipa #1\relax 407 | \hskip -\@tempskipa 408 | \else 409 | \clubpenalty \@clubpenalty 410 | \everypar{}% 411 | \fi}% 412 | \fi 413 | \ignorespaces} 414 | \def\@seccntformat#1{\csname the#1\endcsname\quad} 415 | \def\@ssect#1#2#3#4#5{% 416 | \@tempskipa #3\relax 417 | \ifdim \@tempskipa>\z@ 418 | \begingroup 419 | #4{% 420 | \@hangfrom{\hskip #1}% 421 | \interlinepenalty \@M #5\@@par}% 422 | \endgroup 423 | \else 424 | \def\@svsechd{#4{\hskip #1\relax #5}}% 425 | \fi 426 | \@xsect{#3}} 427 | \def\@starttoc#1#2{\begingroup\makeatletter 428 | \setTrue{#1}% 429 | \par\removelastskip\vskip\z@skip 430 | \@startsection{section}\@M\z@{\linespacing\@plus\linespacing}% 431 | {.5\linespacing}{\centering\contentsnamefont}{#2}% 432 | \@input{\jobname.#1}% 433 | \if@filesw 434 | \@xp\newwrite\csname tf@#1\endcsname 435 | \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax 436 | \fi 437 | \global\@nobreakfalse \endgroup 438 | \addvspace{32\p@\@plus14\p@}% 439 | } 440 | \def\l@section{\@tocline{1}{0pt}{1pc}{2pc}{}} 441 | \def\l@subsection{\@tocline{2}{0pt}{1pc}{3pc}{}} 442 | \def\l@subsubsection{\@tocline{2}{0pt}{1pc}{5pc}{}} 443 | \def\@makefntext{\noindent\@makefnmark} 444 | \if@ACM@sigchiamode 445 | \long\def\@footnotetext#1{\marginpar{% 446 | \reset@font\small 447 | \interlinepenalty\interfootnotelinepenalty 448 | \protected@edef\@currentlabel{% 449 | \csname p@footnote\endcsname\@thefnmark 450 | }% 451 | \color@begingroup 452 | \@makefntext{% 453 | \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% 454 | \color@endgroup}}% 455 | \fi 456 | \long\def\@mpfootnotetext#1{% 457 | \global\setbox\@mpfootins\vbox{% 458 | \unvbox\@mpfootins 459 | \reset@font\footnotesize 460 | \hsize\columnwidth 461 | \@parboxrestore 462 | \protected@edef\@currentlabel 463 | {\csname p@mpfootnote\endcsname\@thefnmark}% 464 | \color@begingroup\centering 465 | \@makefntext{% 466 | \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% 467 | \color@endgroup}} 468 | \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}} 469 | \let\@footnotemark@nolink\@footnotemark 470 | \let\@footnotetext@nolink\@footnotetext 471 | \RequirePackage[bookmarksnumbered,unicode]{hyperref} 472 | \pdfstringdefDisableCommands{% 473 | \def\addtocounter#1#2{}% 474 | \def\unskip{}% 475 | \def\textbullet{- }% 476 | \def\textrightarrow{ -> }% 477 | \def\footnotemark{}% 478 | } 479 | \urlstyle{rm} 480 | \ifcase\ACM@format@nr 481 | \relax % manuscript 482 | \or % acmsmall 483 | \or % acmlarge 484 | \or % acmtog 485 | \or % sigconf 486 | \or % siggraph 487 | \or % sigplan 488 | \urlstyle{sf} 489 | \or % sigchi 490 | \or % sigchi-a 491 | \urlstyle{sf} 492 | \fi 493 | \AtEndPreamble{% 494 | \if@ACM@urlbreakonhyphens 495 | \def\do@url@hyp{\do\-}% 496 | \fi 497 | \if@ACM@screen 498 | \hypersetup{colorlinks, 499 | linkcolor=ACMPurple, 500 | citecolor=ACMPurple, 501 | urlcolor=ACMDarkBlue, 502 | filecolor=ACMDarkBlue} 503 | \else 504 | \hypersetup{hidelinks} 505 | \fi 506 | \hypersetup{pdflang={en}, 507 | pdfdisplaydoctitle}} 508 | \if@ACM@natbib 509 | \let\citeN\cite 510 | \let\cite\citep 511 | \let\citeANP\citeauthor 512 | \let\citeNN\citeyearpar 513 | \let\citeyearNP\citeyear 514 | \let\citeNP\citealt 515 | \DeclareRobustCommand\citeA 516 | {\begingroup\NAT@swafalse 517 | \let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}% 518 | \providecommand\newblock{}% 519 | \else 520 | \AtBeginDocument{% 521 | \let\shortcite\cite% 522 | \providecommand\citename[1]{#1}} 523 | \fi 524 | \newcommand\shortcite[2][]{% 525 | \ifNAT@numbers\cite[#1]{#2}\else\citeyearpar[#1]{#2}\fi} 526 | \def\bibliographystyle#1{% 527 | \ifx\@begindocumenthook\@undefined\else 528 | \expandafter\AtBeginDocument 529 | \fi 530 | {\if@filesw 531 | \immediate\write\@auxout{\string\bibstyle{#1}}% 532 | \fi}} 533 | \RequirePackage{graphicx} 534 | \RequirePackage[prologue]{xcolor} 535 | \definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1} 536 | \definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0} 537 | \definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01} 538 | \definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0} 539 | \definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0} 540 | \definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19} 541 | \definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15} 542 | \definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21} 543 | \if@ACM@authordraft 544 | \RequirePackage{draftwatermark} 545 | \SetWatermarkFontSize{0.5in} 546 | \SetWatermarkColor[gray]{.9} 547 | \SetWatermarkText{\parbox{12em}{\centering 548 | Unpublished working draft.\\ 549 | Not for distribution.}} 550 | \fi 551 | \RequirePackage{geometry} 552 | \ifcase\ACM@format@nr 553 | \relax % manuscript 554 | \geometry{letterpaper,head=13pt, 555 | marginparwidth=6pc,heightrounded}% 556 | \or % acmsmall 557 | \geometry{twoside=true, 558 | includeheadfoot, head=13pt, foot=2pc, 559 | paperwidth=6.75in, paperheight=10in, 560 | top=58pt, bottom=44pt, inner=46pt, outer=46pt, 561 | marginparwidth=2pc,heightrounded 562 | }% 563 | \or % acmlarge 564 | \geometry{twoside=true, head=13pt, foot=2pc, 565 | paperwidth=8.5in, paperheight=11in, 566 | includeheadfoot, 567 | top=78pt, bottom=114pt, inner=81pt, outer=81pt, 568 | marginparwidth=4pc,heightrounded 569 | }% 570 | \or % acmtog 571 | \geometry{twoside=true, head=13pt, foot=2pc, 572 | paperwidth=8.5in, paperheight=11in, 573 | includeheadfoot, columnsep=24pt, 574 | top=52pt, bottom=75pt, inner=52pt, outer=52pt, 575 | marginparwidth=2pc,heightrounded 576 | }% 577 | \or % sigconf 578 | \geometry{twoside=true, head=13pt, 579 | paperwidth=8.5in, paperheight=11in, 580 | includeheadfoot, columnsep=2pc, 581 | top=57pt, bottom=73pt, inner=54pt, outer=54pt, 582 | marginparwidth=2pc,heightrounded 583 | }% 584 | \or % siggraph 585 | \geometry{twoside=true, head=13pt, 586 | paperwidth=8.5in, paperheight=11in, 587 | includeheadfoot, columnsep=2pc, 588 | top=57pt, bottom=73pt, inner=54pt, outer=54pt, 589 | marginparwidth=2pc,heightrounded 590 | }% 591 | \or % sigplan 592 | \geometry{twoside=true, head=13pt, 593 | paperwidth=8.5in, paperheight=11in, 594 | includeheadfoot=false, columnsep=2pc, 595 | top=1in, bottom=1in, inner=0.75in, outer=0.75in, 596 | marginparwidth=2pc,heightrounded 597 | }% 598 | \or % sigchi 599 | \geometry{twoside=true, head=13pt, 600 | paperwidth=8.5in, paperheight=11in, 601 | includeheadfoot, columnsep=2pc, 602 | top=66pt, bottom=73pt, inner=54pt, outer=54pt, 603 | marginparwidth=2pc,heightrounded 604 | }% 605 | \or % sigchi-a 606 | \geometry{twoside=false, head=13pt, 607 | paperwidth=11in, paperheight=8.5in, 608 | includeheadfoot, marginparsep=72pt, 609 | marginparwidth=170pt, columnsep=20pt, 610 | top=72pt, bottom=72pt, left=314pt, right=72pt 611 | }% 612 | \@mparswitchfalse 613 | \reversemarginpar 614 | \fi 615 | \setlength\parindent{10\p@} 616 | \setlength\parskip{\z@} 617 | \ifcase\ACM@format@nr 618 | \relax % manuscript 619 | \or % acmsmall 620 | \or % acmlarge 621 | \or % acmtog 622 | \setlength\parindent{9\p@}% 623 | \or % sigconf 624 | \or % siggraph 625 | \or % sigplan 626 | \or % sigchi 627 | \or % sigchi-a 628 | \fi 629 | \setlength\normalparindent{\parindent} 630 | \def\copyrightpermissionfootnoterule{\kern-3\p@ 631 | \hrule \@width \columnwidth \kern 2.6\p@} 632 | \RequirePackage{manyfoot} 633 | \SelectFootnoteRule[2]{copyrightpermission} 634 | \DeclareNewFootnote{authorsaddresses} 635 | \SelectFootnoteRule[2]{copyrightpermission} 636 | \DeclareNewFootnote{copyrightpermission} 637 | \def\footnoterule{\kern-3\p@ 638 | \hrule \@width 4pc \kern 2.6\p@} 639 | \def\endminipage{% 640 | \par 641 | \unskip 642 | \ifvoid\@mpfootins\else 643 | \vskip\skip\@mpfootins 644 | \normalcolor 645 | \unvbox\@mpfootins 646 | \fi 647 | \@minipagefalse 648 | \color@endgroup 649 | \egroup 650 | \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}} 651 | \def\@textbottom{\vskip \z@ \@plus 1pt} 652 | \let\@texttop\relax 653 | \ifcase\ACM@format@nr 654 | \relax % manuscript 655 | \or % acmsmall 656 | \or % acmlarge 657 | \or % acmtog 658 | \flushbottom 659 | \or % sigconf 660 | \flushbottom 661 | \or % siggraph 662 | \flushbottom 663 | \or % sigplan 664 | \flushbottom 665 | \or % sigchi 666 | \flushbottom 667 | \or % sigchi-a 668 | \fi 669 | \RequirePackage{iftex} 670 | \ifPDFTeX 671 | \input{glyphtounicode} 672 | \pdfglyphtounicode{f_f}{FB00} 673 | \pdfglyphtounicode{f_f_i}{FB03} 674 | \pdfglyphtounicode{f_f_l}{FB04} 675 | \pdfglyphtounicode{f_i}{FB01} 676 | \pdfglyphtounicode{t_t}{0074 0074} 677 | \pdfglyphtounicode{f_t}{0066 0074} 678 | \pdfglyphtounicode{T_h}{0054 0068} 679 | \pdfgentounicode=1 680 | \fi 681 | \RequirePackage{cmap} 682 | \newif\if@ACM@newfonts 683 | \@ACM@newfontstrue 684 | \IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not 685 | have the libertine package installed. Please upgrade your 686 | TeX}\@ACM@newfontsfalse} 687 | \IfFileExists{zi4.sty}{}{\ClassWarning{\@classname}{You do not 688 | have the zi4 package installed. Please upgrade your 689 | TeX}\@ACM@newfontsfalse} 690 | \IfFileExists{newtxmath.sty}{}{\ClassWarning{\@classname}{You do not 691 | have the newtxmath package installed. Please upgrade your 692 | TeX}\@ACM@newfontsfalse} 693 | \if@ACM@newfonts 694 | \RequirePackage[T1]{fontenc} 695 | \ifxetex 696 | \RequirePackage[tt=false]{libertine} 697 | \setmonofont{inconsolata} 698 | \else 699 | \RequirePackage[tt=false, type1=true]{libertine} 700 | \fi 701 | \RequirePackage[varqu]{zi4} 702 | \RequirePackage[libertine]{newtxmath} 703 | \fi 704 | \let\liningnums\@undefined 705 | \AtEndPreamble{% 706 | \DeclareTextFontCommand{\liningnums}{\libertineLF}} 707 | \if@ACM@sigchiamode 708 | \renewcommand{\familydefault}{\sfdefault} 709 | \fi 710 | \newif\if@Description@present 711 | \@Description@presenttrue 712 | \newif\if@undescribed@images 713 | \@undescribed@imagesfalse 714 | \newcommand\Description[2][]{\global\@Description@presenttrue\ignorespaces} 715 | \AtEndDocument{\if@undescribed@images 716 | \ClassWarningNoLine{\@classname}{Some images may lack descriptions}\fi} 717 | \AtBeginEnvironment{figure}{\@Description@presentfalse 718 | \let\@vspace\@vspace@orig 719 | \let\@vspacer\@vspacer@orig} 720 | \AtBeginEnvironment{figure*}{\@Description@presentfalse 721 | \let\@vspace\@vspace@orig 722 | \let\@vspacer\@vspacer@orig} 723 | \AtEndEnvironment{figure}{\if@Description@present\else 724 | \global\@undescribed@imagestrue 725 | \ClassWarning{\@classname}{A possible image without description}\fi} 726 | \AtEndEnvironment{figure*}{\if@Description@present\else 727 | \global\@undescribed@imagestrue 728 | \ClassWarning{\@classname}{A possible image without description}\fi} 729 | \AtBeginEnvironment{table}{\let\@vspace\@vspace@orig 730 | \let\@vspacer\@vspacer@orig} 731 | \AtBeginEnvironment{table*}{\let\@vspace\@vspace@orig 732 | \let\@vspacer\@vspacer@orig} 733 | \AtBeginEnvironment{algorithm}{\let\@vspace\@vspace@orig 734 | \let\@vspacer\@vspacer@orig} 735 | \AtBeginEnvironment{algorithm*}{\let\@vspace\@vspace@orig 736 | \let\@vspacer\@vspacer@orig} 737 | \AtBeginEnvironment{lstlisting}{\let\@vspace\@vspace@orig 738 | \let\@vspacer\@vspacer@orig} 739 | \AtBeginEnvironment{lstlisting*}{\let\@vspace\@vspace@orig 740 | \let\@vspacer\@vspacer@orig} 741 | 742 | \RequirePackage{caption, float} 743 | \captionsetup[table]{position=top} 744 | \if@ACM@journal 745 | \captionsetup{labelfont={sf, small}, 746 | textfont={sf, small}, margin=\z@} 747 | \captionsetup[figure]{name={Fig.}} 748 | \else 749 | \captionsetup{labelfont={bf}, 750 | textfont={bf}, labelsep=colon, margin=\z@} 751 | \ifcase\ACM@format@nr 752 | \relax % manuscript 753 | \or % acmsmall 754 | \or % acmlarge 755 | \or % acmtog 756 | \or % sigconf 757 | \or % siggraph 758 | \captionsetup{textfont={it}} 759 | \or % sigplan 760 | \captionsetup{labelfont={bf}, 761 | textfont={normalfont}, labelsep=period, margin=\z@} 762 | \or % sigchi 763 | \captionsetup[figure]{labelfont={bf, small}, 764 | textfont={bf, small}} 765 | \captionsetup[table]{labelfont={bf, small}, 766 | textfont={bf, small}} 767 | \or % sigchi-a 768 | \captionsetup[figure]{labelfont={bf, small}, 769 | textfont={bf, small}} 770 | \captionsetup[table]{labelfont={bf, small}, 771 | textfont={bf, small}} 772 | \fi 773 | \fi 774 | \newfloat{sidebar}{}{sbar} 775 | \floatname{sidebar}{Sidebar} 776 | \renewenvironment{sidebar}{\Collect@Body\@sidebar}{} 777 | \long\def\@sidebar#1{\bgroup\let\@vspace\@vspace@orig 778 | \let\@vspacer\@vspacer@orig\captionsetup{type=sidebar}% 779 | \marginpar{\small#1}\egroup} 780 | \newenvironment{marginfigure}{\Collect@Body\@marginfigure}{} 781 | \long\def\@marginfigure#1{\bgroup 782 | \let\@vspace\@vspace@orig 783 | \let\@vspacer\@vspacer@orig 784 | \captionsetup{type=figure}% 785 | \marginpar{\@Description@presentfalse\centering 786 | \small#1\if@Description@present\else 787 | \global\@undescribed@imagestrue 788 | \ClassWarning{\@classname}{A possible image without description} 789 | \fi}% 790 | \egroup} 791 | \newenvironment{margintable}{\Collect@Body\@margintable}{} 792 | \long\def\@margintable#1{\bgroup\let\@vspace\@vspace@orig 793 | \let\@vspacer\@vspacer@orig\captionsetup{type=table}% 794 | \marginpar{\centering\small#1}\egroup} 795 | \newdimen\fulltextwidth 796 | \fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep) 797 | \if@ACM@sigchiamode 798 | \def\@dblfloat{\bgroup\let\@vspace\@vspace@orig 799 | \let\@vspacer\@vspacer@orig\columnwidth=\fulltextwidth 800 | \let\@endfloatbox\@endwidefloatbox 801 | \def\@fpsadddefault{\def\@fps{tp}}% 802 | \@float} 803 | \fi 804 | \if@ACM@sigchiamode 805 | \def\end@dblfloat{% 806 | \end@float\egroup} 807 | \fi 808 | \def\@endwidefloatbox{% 809 | \par\vskip\z@skip 810 | \@minipagefalse 811 | \outer@nobreak 812 | \egroup 813 | \color@endbox 814 | \global\setbox\@currbox=\vbox{\moveleft 815 | \dimexpr(\fulltextwidth-\textwidth)\box\@currbox}% 816 | \wd\@currbox=\textwidth 817 | } 818 | \ifcase\ACM@format@nr 819 | \relax % manuscript 820 | \or % acmsmall 821 | \or % acmlarge 822 | \or % acmtog 823 | \or % sigconf 824 | \or % siggraph 825 | \or % sigplan 826 | \def\labelenumi{\theenumi.} 827 | \def\labelenumii{\theenumii.} 828 | \def\labelenumiii{\theenumiii.} 829 | \def\labelenumiv{\theenumiv.} 830 | \or % sigchi 831 | \or % sigchi-a 832 | \fi 833 | \newdimen\@ACM@labelwidth 834 | \AtBeginDocument{% 835 | \setlength\labelsep{4pt} 836 | \setlength{\@ACM@labelwidth}{6.5pt} 837 | 838 | %% First-level list: when beginning after the first line of an 839 | %% indented paragraph or ending before an indented paragraph, labels 840 | %% should not hang to the left of the preceding/following text. 841 | \setlength\leftmargini{\z@} 842 | \addtolength\leftmargini{\parindent} 843 | \addtolength\leftmargini{2\labelsep} 844 | \addtolength\leftmargini{\@ACM@labelwidth} 845 | 846 | %% Second-level and higher lists. 847 | \setlength\leftmarginii{\z@} 848 | \addtolength\leftmarginii{0.5\labelsep} 849 | \addtolength\leftmarginii{\@ACM@labelwidth} 850 | \setlength\leftmarginiii{\leftmarginii} 851 | \setlength\leftmarginiv{\leftmarginiii} 852 | \setlength\leftmarginv{\leftmarginiv} 853 | \setlength\leftmarginvi{\leftmarginv} 854 | \@listi} 855 | \newskip\listisep 856 | \listisep\smallskipamount 857 | \def\@listI{\leftmargin\leftmargini 858 | \labelwidth\leftmargini \advance\labelwidth-\labelsep 859 | \listparindent\z@ 860 | \topsep\listisep} 861 | \let\@listi\@listI 862 | \def\@listii{\leftmargin\leftmarginii 863 | \labelwidth\leftmarginii \advance\labelwidth-\labelsep 864 | \topsep\z@skip} 865 | \def\@listiii{\leftmargin\leftmarginiii 866 | \labelwidth\leftmarginiii \advance\labelwidth-\labelsep} 867 | \def\@listiv{\leftmargin\leftmarginiv 868 | \labelwidth\leftmarginiv \advance\labelwidth-\labelsep} 869 | \def\@listv{\leftmargin\leftmarginv 870 | \labelwidth\leftmarginv \advance\labelwidth-\labelsep} 871 | \def\@listvi{\leftmargin\leftmarginvi 872 | \labelwidth\leftmarginvi \advance\labelwidth-\labelsep} 873 | \renewcommand{\descriptionlabel}[1]{\upshape\bfseries #1} 874 | \renewenvironment{description}{\list{}{% 875 | \labelwidth\@ACM@labelwidth 876 | \let\makelabel\descriptionlabel}% 877 | }{ 878 | \endlist 879 | } 880 | \let\enddescription=\endlist % for efficiency 881 | \newif\if@ACM@maketitle@typeset 882 | \@ACM@maketitle@typesetfalse 883 | \define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{% 884 | CIE,% 885 | CSUR,% 886 | DGOV,% 887 | DTRAP,% 888 | HEALTH,% 889 | IMWUT,% 890 | JACM,% 891 | JDIQ,% 892 | JEA,% 893 | JERIC,% 894 | JETC,% 895 | JOCCH,% 896 | PACMCGIT,% 897 | PACMHCI,% 898 | PACMPL,% 899 | POMACS,% 900 | TAAS,% 901 | TACCESS,% 902 | TACO,% 903 | TALG,% 904 | TALLIP,% 905 | TAP,% 906 | TCPS,% 907 | TDS,% 908 | TEAC,% 909 | TECS,% 910 | TELO,% 911 | THRI,% 912 | TIIS,% 913 | TIOT,% 914 | TISSEC,% 915 | TIST,% 916 | TKDD,% 917 | TMIS,% 918 | TOCE,% 919 | TOCHI,% 920 | TOCL,% 921 | TOCS,% 922 | TOCT,% 923 | TODAES,% 924 | TODS,% 925 | TOG,% 926 | TOIS,% 927 | TOIT,% 928 | TOMACS,% 929 | TOMM,% 930 | TOMPECS,% 931 | TOMS,% 932 | TOPC,% 933 | TOPS,% 934 | TOPLAS,% 935 | TOS,% 936 | TOSEM,% 937 | TOSN,% 938 | TQC,% 939 | TRETS,% 940 | TSAS,% 941 | TSC,% 942 | TSLP,% 943 | TWEB,% 944 | FACMP% 945 | }{% 946 | \ifcase\@journalCode@nr 947 | \relax % CIE 948 | \def\@journalName{ACM Computers in Entertainment}% 949 | \def\@journalNameShort{ACM Comput. Entertain.}% 950 | \def\@permissionCodeOne{1544-3574}% 951 | \or % CSUR 952 | \def\@journalName{ACM Computing Surveys}% 953 | \def\@journalNameShort{ACM Comput. Surv.}% 954 | \def\@permissionCodeOne{0360-0300}% 955 | \or % DGOV 956 | \def\@journalName{Digital Government: Research and Practice}% 957 | \def\@journalNameShort{Digit. Gov. Res. Pract.}% 958 | \def\@permissionCodeOne{2639-0175}% 959 | \or % DTRAP 960 | \def\@journalName{Digital Threats: Research and Practice}% 961 | \def\@journalNameShort{Digit. Threat. Res. Pract.}% 962 | \def\@permissionCodeOne{2576-5337}% 963 | \or % HEALTH 964 | \def\@journalName{ACM Transactions on Computing for Healthcare}% 965 | \def\@journalNameShort{ACM Trans. Comput. Healthcare}% 966 | \def\@permissionCodeOne{2637-8051}% 967 | \or % IMWUT 968 | \def\@journalName{Proceedings of the ACM on Interactive, Mobile, 969 | Wearable and Ubiquitous Technologies}% 970 | \def\@journalNameShort{Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.}% 971 | \def\@permissionCodeOne{2474-9567}% 972 | \@ACM@screentrue 973 | \PackageInfo{\@classname}{Using screen mode due to \@journalCode}% 974 | \or % JACM 975 | \def\@journalName{Journal of the ACM}% 976 | \def\@journalNameShort{J. ACM}% 977 | \def\@permissionCodeOne{0004-5411}% 978 | \or % JDIQ 979 | \def\@journalName{ACM Journal of Data and Information Quality}% 980 | \def\@journalNameShort{ACM J. Data Inform. Quality}% 981 | \def\@permissionCodeOne{1936-1955}% 982 | \or % JEA 983 | \def\@journalName{ACM Journal of Experimental Algorithmics}% 984 | \def\@journalNameShort{ACM J. Exp. Algor.}% 985 | \def\@permissionCodeOne{1084-6654}% 986 | \or % JERIC 987 | \def\@journalName{ACM Journal of Educational Resources in Computing}% 988 | \def\@journalNameShort{ACM J. Edu. Resources in Comput.}% 989 | \def\@permissionCodeOne{1073-0516}% 990 | \or % JETC 991 | \def\@journalName{ACM Journal on Emerging Technologies in Computing Systems}% 992 | \def\@journalNameShort{ACM J. Emerg. Technol. Comput. Syst.}% 993 | \def\@permissionCodeOne{1550-4832}% 994 | \or % JOCCH 995 | \def\@journalName{ACM Journal on Computing and Cultural Heritage}% 996 | \def\@journalNameShort{ACM J. Comput. Cult. Herit.}% 997 | \or % PACMCGIT 998 | \def\@journalName{Proceedings of the ACM on Computer Graphics and Interactive Techniques}% 999 | \def\@journalNameShort{Proc. ACM Comput. Graph. Interact. Tech.}% 1000 | \def\@permissionCodeOne{2577-6193}% 1001 | \@ACM@screentrue 1002 | \PackageInfo{\@classname}{Using screen mode due to \@journalCode}% 1003 | \or % PACMHCI 1004 | \def\@journalName{Proceedings of the ACM on Human-Computer Interaction}% 1005 | \def\@journalNameShort{Proc. ACM Hum.-Comput. Interact.}% 1006 | \def\@permissionCodeOne{2573-0142}% 1007 | \@ACM@screentrue 1008 | \PackageInfo{\@classname}{Using screen mode due to \@journalCode}% 1009 | \or % PACMPL 1010 | \def\@journalName{Proceedings of the ACM on Programming Languages}% 1011 | \def\@journalNameShort{Proc. ACM Program. Lang.}% 1012 | \def\@permissionCodeOne{2475-1421}% 1013 | \@ACM@screentrue 1014 | \PackageInfo{\@classname}{Using screen mode due to \@journalCode}% 1015 | \or % POMACS 1016 | \def\@journalName{Proceedings of the ACM on Measurement and Analysis of Computing Systems}% 1017 | \def\@journalNameShort{Proc. ACM Meas. Anal. Comput. Syst.}% 1018 | \def\@permissionCodeOne{2476-1249}% 1019 | \@ACM@screentrue 1020 | \PackageInfo{\@classname}{Using screen mode due to \@journalCode}% 1021 | \or % TAAS 1022 | \def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}% 1023 | \def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}% 1024 | \def\@permissionCodeOne{1556-4665}% 1025 | \or % TACCESS 1026 | \def\@journalName{ACM Transactions on Accessible Computing}% 1027 | \def\@journalNameShort{ACM Trans. Access. Comput.}% 1028 | \def\@permissionCodeOne{1936-7228}% 1029 | \or % TACO 1030 | \def\@journalName{ACM Transactions on Architecture and Code Optimization}% 1031 | \def\@journalNameShort{ACM Trans. Arch. Code Optim.}% 1032 | \or % TALG 1033 | \def\@journalName{ACM Transactions on Algorithms}% 1034 | \def\@journalNameShort{ACM Trans. Algor.}% 1035 | \def\@permissionCodeOne{1549-6325}% 1036 | \or % TALLIP 1037 | \def\@journalName{ACM Transactions on Asian and Low-Resource Language Information Processing}% 1038 | \def\@journalNameShort{ACM Trans. Asian Low-Resour. Lang. Inf. Process.}% 1039 | \def\@permissionCodeOne{2375-4699}% 1040 | \or % TAP 1041 | \def\@journalName{ACM Transactions on Applied Perception}% 1042 | \or % TCPS 1043 | \def\@journalName{ACM Transactions on Cyber-Physical Systems}% 1044 | \or % TDS 1045 | \def\@journalName{ACM/IMS Transactions on Data Science}% 1046 | \def\@journalNameShort{ACM/IMS Trans. Data Sci.}% 1047 | \def\@permissionCodeOne{2577-3224}% 1048 | \or % TEAC 1049 | \def\@journalName{ACM Transactions on Economics and Computation}% 1050 | \or % TECS 1051 | \def\@journalName{ACM Transactions on Embedded Computing Systems}% 1052 | \def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}% 1053 | \def\@permissionCodeOne{1539-9087}% 1054 | \or % TELO 1055 | \def\@journalName{ACM Transactions on Evolutionary Learning}% 1056 | \def\@journalNameShort{ACM Trans. Evol. Learn.}% 1057 | \def\@permissionCodeOne{2688-3007}% 1058 | \or % THRI 1059 | \def\@journalName{ACM Transactions on Human-Robot Interaction}% 1060 | \def\@journalNameShort{ACM Trans. Hum.-Robot Interact.}% 1061 | \def\@permissionCodeOne{2573-9522}% 1062 | \or % TIIS 1063 | \def\@journalName{ACM Transactions on Interactive Intelligent Systems}% 1064 | \def\@journalNameShort{ACM Trans. Interact. Intell. Syst.}% 1065 | \def\@permissionCodeOne{2160-6455}% 1066 | \or % TIOT 1067 | \def\@journalName{ACM Transactions on Internet of Things}% 1068 | \def\@journalNameShort{ACM Trans. Internet Things}% 1069 | \def\@permissionCodeOne{2577-6207}% 1070 | \or % TISSEC 1071 | \def\@journalName{ACM Transactions on Information and System Security}% 1072 | \def\@journalNameShort{ACM Trans. Info. Syst. Sec.}% 1073 | \def\@permissionCodeOne{1094-9224}% 1074 | \or % TIST 1075 | \def\@journalName{ACM Transactions on Intelligent Systems and Technology}% 1076 | \def\@journalNameShort{ACM Trans. Intell. Syst. Technol.}% 1077 | \def\@permissionCodeOne{2157-6904}% 1078 | \or % TKDD 1079 | \def\@journalName{ACM Transactions on Knowledge Discovery from Data}% 1080 | \def\@journalNameShort{ACM Trans. Knowl. Discov. Data.}% 1081 | \def\@permissionCodeOne{1556-4681}% 1082 | \or % TMIS 1083 | \def\@journalName{ACM Transactions on Management Information Systems}% 1084 | \def\@journalNameShort{ACM Trans. Manag. Inform. Syst.}% 1085 | \def\@permissionCodeOne{2158-656X}% 1086 | \or % TOCE 1087 | \def\@journalName{ACM Transactions on Computing Education}% 1088 | \def\@journalNameShort{ACM Trans. Comput. Educ.}% 1089 | \def\@permissionCodeOne{1946-6226}% 1090 | \or % TOCHI 1091 | \def\@journalName{ACM Transactions on Computer-Human Interaction}% 1092 | \def\@journalNameShort{ACM Trans. Comput.-Hum. Interact.}% 1093 | \def\@permissionCodeOne{1073-0516}% 1094 | \or % TOCL 1095 | \def\@journalName{ACM Transactions on Computational Logic}% 1096 | \def\@journalNameShort{ACM Trans. Comput. Logic}% 1097 | \def\@permissionCodeOne{1529-3785}% 1098 | \or % TOCS 1099 | \def\@journalName{ACM Transactions on Computer Systems}% 1100 | \def\@journalNameShort{ACM Trans. Comput. Syst.}% 1101 | \def\@permissionCodeOne{0734-2071}% 1102 | \or % TOCT 1103 | \def\@journalName{ACM Transactions on Computation Theory}% 1104 | \def\@journalNameShort{ACM Trans. Comput. Theory}% 1105 | \def\@permissionCodeOne{1942-3454}% 1106 | \or % TODAES 1107 | \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}% 1108 | \def\@journalNameShort{ACM Trans. Des. Autom. Electron. Syst.}% 1109 | \def\@permissionCodeOne{1084-4309}% 1110 | \or % TODS 1111 | \def\@journalName{ACM Transactions on Database Systems}% 1112 | \def\@journalNameShort{ACM Trans. Datab. Syst.}% 1113 | \def\@permissionCodeOne{0362-5915}% 1114 | \or % TOG 1115 | \def\@journalName{ACM Transactions on Graphics}% 1116 | \def\@journalNameShort{ACM Trans. Graph.}% 1117 | \def\@permissionCodeOne{0730-0301} 1118 | \or % TOIS 1119 | \def\@journalName{ACM Transactions on Information Systems}% 1120 | \def\@permissionCodeOne{1046-8188}% 1121 | \or % TOIT 1122 | \def\@journalName{ACM Transactions on Internet Technology}% 1123 | \def\@journalNameShort{ACM Trans. Internet Technol.}% 1124 | \def\@permissionCodeOne{1533-5399}% 1125 | \or % TOMACS 1126 | \def\@journalName{ACM Transactions on Modeling and Computer Simulation}% 1127 | \def\@journalNameShort{ACM Trans. Model. Comput. Simul.}% 1128 | \or % TOMM 1129 | \def\@journalName{ACM Transactions on Multimedia Computing, Communications and Applications}% 1130 | \def\@journalNameShort{ACM Trans. Multimedia Comput. Commun. Appl.}% 1131 | \def\@permissionCodeOne{1551-6857}% 1132 | \def\@permissionCodeTwo{0100}% 1133 | \or % TOMPECS 1134 | \def\@journalName{ACM Transactions on Modeling and Performance Evaluation of Computing Systems}% 1135 | \def\@journalNameShort{ACM Trans. Model. Perform. Eval. Comput. Syst.}% 1136 | \def\@permissionCodeOne{2376-3639}% 1137 | \or % TOMS 1138 | \def\@journalName{ACM Transactions on Mathematical Software}% 1139 | \def\@journalNameShort{ACM Trans. Math. Softw.}% 1140 | \def\@permissionCodeOne{0098-3500}% 1141 | \or % TOPC 1142 | \def\@journalName{ACM Transactions on Parallel Computing}% 1143 | \def\@journalNameShort{ACM Trans. Parallel Comput.}% 1144 | \def\@permissionCodeOne{1539-9087}% 1145 | \or % TOPS 1146 | \def\@journalName{ACM Transactions on Privacy and Security}% 1147 | \def\@journalNameShort{ACM Trans. Priv. Sec.}% 1148 | \def\@permissionCodeOne{2471-2566}% 1149 | \or % TOPLAS 1150 | \def\@journalName{ACM Transactions on Programming Languages and Systems}% 1151 | \def\@journalNameShort{ACM Trans. Program. Lang. Syst.}% 1152 | \def\@permissionCodeOne{0164-0925}% 1153 | \or % TOS 1154 | \def\@journalName{ACM Transactions on Storage}% 1155 | \def\@journalNameShort{ACM Trans. Storage}% 1156 | \def\@permissionCodeOne{1553-3077}% 1157 | \or % TOSEM 1158 | \def\@journalName{ACM Transactions on Software Engineering and Methodology}% 1159 | \def\@journalNameShort{ACM Trans. Softw. Eng. Methodol.}% 1160 | \def\@permissionCodeOne{1049-331X}% 1161 | \or % TOSN 1162 | \def\@journalName{ACM Transactions on Sensor Networks}% 1163 | \def\@journalNameShort{ACM Trans. Sensor Netw.}% 1164 | \def\@permissionCodeOne{1550-4859}% 1165 | \or % TQC 1166 | \def\@journalName{ACM Transactions on Quantum Computing}% 1167 | \def\@journalNameShort{ACM Trans. Quantum Comput.}% 1168 | \def\@permissionCodeOne{2643-6817}% 1169 | \or % TRETS 1170 | \def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}% 1171 | \def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}% 1172 | \def\@permissionCodeOne{1936-7406}% 1173 | \or % TSAS 1174 | \def\@journalName{ACM Transactions on Spatial Algorithms and Systems}% 1175 | \def\@journalNameShort{ACM Trans. Spatial Algorithms Syst.}% 1176 | \def\@permissionCodeOne{2374-0353}% 1177 | \or % TSC 1178 | \def\@journalName{ACM Transactions on Social Computing}% 1179 | \def\@journalNameShort{ACM Trans. Soc. Comput.}% 1180 | \def\@permissionCodeOne{2469-7818}% 1181 | \or % TSLP 1182 | \def\@journalName{ACM Transactions on Speech and Language Processing}% 1183 | \def\@journalNameShort{ACM Trans. Speech Lang. Process.}% 1184 | \def\@permissionCodeOne{1550-4875}% 1185 | \or % TWEB 1186 | \def\@journalName{ACM Transactions on the Web}% 1187 | \def\@journalNameShort{ACM Trans. Web}% 1188 | \def\@permissionCodeOne{1559-1131}% 1189 | \else % FACMP, a dummy journal 1190 | \def\@journalName{Forthcoming ACM Publication}% 1191 | \def\@journalNameShort{ACM Forthcoming}% 1192 | \def\@permissionCodeOne{XXXX-XXXX}% 1193 | \fi 1194 | \ClassInfo{\@classname}{Using journal code \@journalCode}% 1195 | }{% 1196 | \ClassError{\@classname}{Incorrect journal #1}% 1197 | }% 1198 | \def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}% 1199 | \global\@ACM@journal@bibstriptrue} 1200 | \def\@journalCode@nr{0} 1201 | \def\@journalName{}% 1202 | \def\@journalNameShort{\@journalName}% 1203 | \def\@permissionCodeOne{XXXX-XXXX}% 1204 | \def\@permissionCodeTwo{}% 1205 | \newcommand\acmConference[4][]{% 1206 | \gdef\acmConference@shortname{#1}% 1207 | \gdef\acmConference@name{#2}% 1208 | \gdef\acmConference@date{#3}% 1209 | \gdef\acmConference@venue{#4}% 1210 | \ifx\acmConference@shortname\@empty 1211 | \gdef\acmConference@shortname{#2}% 1212 | \fi 1213 | \global\@ACM@journal@bibstripfalse 1214 | } 1215 | \if@ACM@journal\else 1216 | \acmConference[Conference'17]{ACM Conference}{July 2017}{Washington, 1217 | DC, USA}% 1218 | \fi 1219 | \def\acmBooktitle#1{\gdef\@acmBooktitle{#1}} 1220 | \acmBooktitle{Proceedings of \acmConference@name 1221 | \ifx\acmConference@name\acmConference@shortname\else 1222 | \ (\acmConference@shortname)\fi} 1223 | \def\@editorsAbbrev{(Ed.)} 1224 | \def\@acmEditors{} 1225 | \def\editor#1{\ifx\@acmEditors\@empty 1226 | \gdef\@acmEditors{#1}% 1227 | \else 1228 | \gdef\@editorsAbbrev{(Eds.)}% 1229 | \g@addto@macro\@acmEditors{\and#1}% 1230 | \fi} 1231 | \def\subtitle#1{\def\@subtitle{#1}} 1232 | \subtitle{} 1233 | \newcount\num@authorgroups 1234 | \num@authorgroups=0\relax 1235 | \newcount\num@authors 1236 | \num@authors=0\relax 1237 | \newif\if@insideauthorgroup 1238 | \@insideauthorgroupfalse 1239 | \renewcommand\author[2][]{% 1240 | \IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several 1241 | authors in the same \string\author\space macro!}}{}% 1242 | \global\advance\num@authors by 1\relax 1243 | \if@insideauthorgroup\else 1244 | \global\advance\num@authorgroups by 1\relax 1245 | \global\@insideauthorgrouptrue 1246 | \fi 1247 | \ifx\addresses\@empty 1248 | \if@ACM@anonymous 1249 | \gdef\addresses{\@author{Anonymous Author(s)% 1250 | \ifx\@acmSubmissionID\@empty\else\\Submission Id: 1251 | \@acmSubmissionID\fi}}% 1252 | \gdef\authors{Anonymous Author(s)}% 1253 | \else 1254 | \gdef\addresses{\@author{#2}}% 1255 | \gdef\authors{#2}% 1256 | \fi 1257 | \else 1258 | \if@ACM@anonymous\else 1259 | \g@addto@macro\addresses{\and\@author{#2}}% 1260 | \g@addto@macro\authors{\and#2}% 1261 | \fi 1262 | \fi 1263 | \if@ACM@anonymous 1264 | \ifx\shortauthors\@empty 1265 | \gdef\shortauthors{Anon. 1266 | \ifx\@acmSubmissionID\@empty\else Submission Id: 1267 | \@acmSubmissionID\fi}% 1268 | \fi 1269 | \else 1270 | \def\@tempa{#1}% 1271 | \ifx\@tempa\@empty 1272 | \ifx\shortauthors\@empty 1273 | \gdef\shortauthors{#2}% 1274 | \else 1275 | \g@addto@macro\shortauthors{\and#2}% 1276 | \fi 1277 | \else 1278 | \ifx\shortauthors\@empty 1279 | \gdef\shortauthors{#1}% 1280 | \else 1281 | \g@addto@macro\shortauthors{\and#1}% 1282 | \fi 1283 | \fi 1284 | \fi} 1285 | \newcommand{\affiliation}[2][]{% 1286 | \global\@insideauthorgroupfalse 1287 | \if@ACM@anonymous\else 1288 | \g@addto@macro\addresses{\affiliation{#1}{#2}}% 1289 | \fi} 1290 | \define@boolkey+{@ACM@affiliation@}[@ACM@affiliation@]{obeypunctuation}% 1291 | [true]{}{\ClassError{\@classname}{The option obeypunctuation can be either true or false}} 1292 | \def\additionalaffiliation#1{\authornote{\@additionalaffiliation{#1}}} 1293 | \def\@additionalaffiliation#1{\bgroup 1294 | \def\position##1{\ignorespaces}% 1295 | \def\institution##1{##1\ignorespaces}% 1296 | \def\department{\@ifnextchar[{\@department}{\@department[]}}% 1297 | \def\@department[##1]##2{\unskip, ##2\ignorespaces}% 1298 | \let\streetaddress\position 1299 | \let\city\position 1300 | \let\state\position 1301 | \let\postcode\position 1302 | \let\country\position 1303 | Also with #1\unskip.\egroup} 1304 | \renewcommand{\email}[2][]{% 1305 | \IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several 1306 | addresses in the same \string\email\space macro!}}{}% 1307 | \if@ACM@anonymous\else 1308 | \g@addto@macro\addresses{\email{#1}{#2}}% 1309 | \fi} 1310 | \def\orcid#1{\unskip\ignorespaces} 1311 | \def\authorsaddresses#1{\def\@authorsaddresses{#1}} 1312 | \authorsaddresses{\@mkauthorsaddresses} 1313 | \def\@titlenotes{} 1314 | \def\titlenote#1{% 1315 | \g@addto@macro\@title{\footnotemark}% 1316 | \if@ACM@anonymous 1317 | \g@addto@macro\@titlenotes{% 1318 | \stepcounter{footnote}\footnotetext{Title note}}% 1319 | \else 1320 | \g@addto@macro\@titlenotes{\stepcounter{footnote}\footnotetext{#1}}% 1321 | \fi} 1322 | \def\@subtitlenotes{} 1323 | \def\subtitlenote#1{% 1324 | \g@addto@macro\@subtitle{\footnotemark}% 1325 | \if@ACM@anonymous 1326 | \g@addto@macro\@subtitlenotes{% 1327 | \stepcounter{footnote}\footnotetext{Subtitle note}}% 1328 | \else 1329 | \g@addto@macro\@subtitlenotes{% 1330 | \stepcounter{footnote}\footnotetext{#1}}% 1331 | \fi} 1332 | \def\@authornotes{} 1333 | \def\authornote#1{% 1334 | \if@ACM@anonymous\else 1335 | \g@addto@macro\addresses{\@authornotemark}% 1336 | \g@addto@macro\@authornotes{% 1337 | \stepcounter{footnote}\footnotetext{#1}}% 1338 | \fi} 1339 | \newcommand\authornotemark[1][\relax]{% 1340 | \ifx#1\relax\relax\relax 1341 | \g@addto@macro\addresses{\@authornotemark}% 1342 | \else 1343 | \g@addto@macro\addresses{\@@authornotemark{#1}}% 1344 | \fi} 1345 | \def\acmVolume#1{\def\@acmVolume{#1}} 1346 | \acmVolume{1} 1347 | \def\acmNumber#1{\def\@acmNumber{#1}} 1348 | \acmNumber{1} 1349 | \def\acmArticle#1{\def\@acmArticle{#1}} 1350 | \acmArticle{} 1351 | \def\acmArticleSeq#1{\def\@acmArticleSeq{#1}} 1352 | \acmArticleSeq{\@acmArticle} 1353 | \def\acmYear#1{\def\@acmYear{#1}} 1354 | \acmYear{\the\year} 1355 | \def\acmMonth#1{\def\@acmMonth{#1}} 1356 | \acmMonth{\the\month} 1357 | \def\@acmPubDate{\ifcase\@acmMonth\or 1358 | January\or February\or March\or April\or May\or June\or 1359 | July\or August\or September\or October\or November\or 1360 | December\fi~\@acmYear} 1361 | \def\acmPrice#1{\def\@acmPrice{#1}} 1362 | \acmPrice{15.00} 1363 | \def\acmSubmissionID#1{\def\@acmSubmissionID{#1}} 1364 | \acmSubmissionID{} 1365 | \def\acmISBN#1{\def\@acmISBN{#1}} 1366 | \acmISBN{978-x-xxxx-xxxx-x/YY/MM} 1367 | \def\acmDOI#1{\def\@acmDOI{#1}} 1368 | \acmDOI{10.1145/nnnnnnn.nnnnnnn} 1369 | \newif\if@ACM@badge 1370 | \@ACM@badgefalse 1371 | \newlength\@ACM@badge@width 1372 | \setlength\@ACM@badge@width{5pc} 1373 | \newlength\@ACM@title@width 1374 | \newlength\@ACM@badge@skip 1375 | \setlength\@ACM@badge@skip{1pc} 1376 | \newcommand\acmBadgeR[2][]{\@ACM@badgetrue 1377 | \def\@acmBadgeR@url{#1}% 1378 | \def\@acmBadgeR@image{#2}} 1379 | \def\@acmBadgeR@url{} 1380 | \def\@acmBadgeR@image{} 1381 | \newcommand\acmBadgeL[2][]{\@ACM@badgetrue 1382 | \def\@acmBadgeL@url{#1}% 1383 | \def\@acmBadgeL@image{#2}} 1384 | \def\@acmBadgeL@url{} 1385 | \def\@acmBadgeL@image{} 1386 | \def\startPage#1{\def\@startPage{#1}} 1387 | \startPage{} 1388 | \def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is 1389 | obsolete. I am going to ignore it}} 1390 | \def\keywords#1{\def\@keywords{#1}} 1391 | \let\@keywords\@empty 1392 | \AtEndDocument{\if@ACM@nonacm\else\ifx\@keywords\@empty 1393 | \ifnum\getrefnumber{TotPages}>2\relax 1394 | \ClassWarningNoLine{\@classname}{ACM keywords are mandatory 1395 | for papers over two pages}% 1396 | \fi\fi\fi} 1397 | \renewenvironment{abstract}{\Collect@Body\@saveabstract}{} 1398 | \long\def\@saveabstract#1{\if@ACM@maketitle@typeset 1399 | \ClassError{\@classname}{Abstract must be defined before maketitle 1400 | command. Please move it!}\fi 1401 | \long\gdef\@abstract{#1}} 1402 | \@saveabstract{} 1403 | \long\def\@lempty{} 1404 | \define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{% 1405 | \if@ACM@printccs 1406 | \ClassInfo{\@classname}{Printing CCS}% 1407 | \else 1408 | \ClassInfo{\@classname}{Suppressing CCS}% 1409 | \fi}{\ClassError{\@classname}{The option printccs can be either true or false}} 1410 | \define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{% 1411 | \if@ACM@printacmref 1412 | \ClassInfo{\@classname}{Printing bibformat}% 1413 | \else 1414 | \ClassInfo{\@classname}{Suppressing bibformat}% 1415 | \fi}{\ClassError{\@classname}{The option printacmref can be either true or false}} 1416 | \AtEndDocument{\if@ACM@nonacm\else\if@ACM@printacmref\else 1417 | \ifnum\getrefnumber{TotPages}>1\relax 1418 | \ClassWarningNoLine{\@classname}{ACM reference format is mandatory 1419 | for papers over one page}% 1420 | \fi\fi\fi} 1421 | \define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{% 1422 | \if@ACM@printfolios 1423 | \ClassInfo{\@classname}{Printing folios}% 1424 | \else 1425 | \ClassInfo{\@classname}{Suppressing folios}% 1426 | \fi}{\ClassError{\@classname}{The option printfolios can be either true or false}} 1427 | \define@cmdkey{@ACM@topmatter@}[@ACM@]{authorsperrow}[0]{% 1428 | \IfInteger{#1}{\ClassInfo{\@classname}{Setting authorsperrow to 1429 | #1}}{\ClassWarning{\@classname}{The parameter authorsperrow must be 1430 | numerical. Ignoring the input #1}\gdef\@ACM@authorsperrow{0}}} 1431 | \def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}} 1432 | \settopmatter{printccs=true, printacmref=true} 1433 | \if@ACM@manuscript 1434 | \settopmatter{printfolios=true} 1435 | \else 1436 | \if@ACM@journal 1437 | \settopmatter{printfolios=true} 1438 | \else 1439 | \settopmatter{printfolios=false} 1440 | \fi 1441 | \fi 1442 | \settopmatter{authorsperrow=0} 1443 | \def\@received{} 1444 | \newcommand\received[2][]{\def\@tempa{#1}% 1445 | \ifx\@tempa\@empty 1446 | \ifx\@received\@empty 1447 | \gdef\@received{Received #2}% 1448 | \else 1449 | \g@addto@macro{\@received}{; revised #2}% 1450 | \fi 1451 | \else 1452 | \ifx\@received\@empty 1453 | \gdef\@received{#1 #2}% 1454 | \else 1455 | \g@addto@macro{\@received}{; #1 #2}% 1456 | \fi 1457 | \fi} 1458 | \AtEndDocument{% 1459 | \ifx\@received\@empty\else 1460 | \par\bigskip\noindent\small\normalfont\@received\par 1461 | \fi} 1462 | \RequirePackage{comment} 1463 | \excludecomment{CCSXML} 1464 | \let\@concepts\@empty 1465 | \newcounter{@concepts} 1466 | \newcommand\ccsdesc[2][100]{% 1467 | \ccsdesc@parse#1~#2~~\ccsdesc@parse@end} 1468 | \def\textrightarrow{$\rightarrow$} 1469 | \def\ccsdesc@parse#1~#2~#3~{% 1470 | \stepcounter{@concepts}% 1471 | \expandafter\ifx\csname CCS@General@#2\endcsname\relax 1472 | \expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\ 1473 | \textbf{#2}}% 1474 | \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{; }% 1475 | \expandafter\gdef\csname CCS@Specific@#2\endcsname{}% 1476 | \g@addto@macro{\@concepts}{\csname CCS@General@#2\endcsname 1477 | \csname CCS@Punctuation@#2\endcsname 1478 | \csname CCS@Specific@#2\endcsname}% 1479 | \fi 1480 | \ifx#3\relax\relax\else 1481 | \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{ 1482 | \textrightarrow\ }% 1483 | \expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{% 1484 | \addtocounter{@concepts}{-1}% 1485 | \ifnum#1>499\textbf{#3}\else 1486 | \ifnum#1>299\textit{#3}\else 1487 | #3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}% 1488 | \fi 1489 | \ccsdesc@parse@finish} 1490 | \AtEndDocument{\if@ACM@nonacm\else\ifx\@concepts\@empty\relax 1491 | \ifnum\getrefnumber{TotPages}>2\relax 1492 | \ClassWarningNoLine{\@classname}{CCS concepts are mandatory 1493 | for papers over two pages}% 1494 | \fi\fi\fi} 1495 | \def\ccsdesc@parse@finish#1\ccsdesc@parse@end{} 1496 | \newif\if@printcopyright 1497 | \@printcopyrighttrue 1498 | \newif\if@printpermission 1499 | \@printpermissiontrue 1500 | \newif\if@acmowned 1501 | \@acmownedtrue 1502 | \define@choicekey*{ACM@}{acmcopyrightmode}[% 1503 | \acm@copyrightinput\acm@copyrightmode]{none,% 1504 | acmcopyright,acmlicensed,rightsretained,% 1505 | usgov,usgovmixed,cagov,cagovmixed,licensedusgovmixed,% 1506 | licensedcagov,licensedcagovmixed,othergov,licensedothergov,% 1507 | iw3c2w3,iw3c2w3g}{% 1508 | \@printpermissiontrue 1509 | \@printcopyrighttrue 1510 | \@acmownedtrue 1511 | \ifnum\acm@copyrightmode=0\relax % none 1512 | \@printpermissionfalse 1513 | \@printcopyrightfalse 1514 | \@acmownedfalse 1515 | \fi 1516 | \ifnum\acm@copyrightmode=2\relax % acmlicensed 1517 | \@acmownedfalse 1518 | \fi 1519 | \ifnum\acm@copyrightmode=3\relax % rightsretained 1520 | \@acmownedfalse 1521 | \AtBeginDocument{\acmPrice{}}% 1522 | \fi 1523 | \ifnum\acm@copyrightmode=4\relax % usgov 1524 | \@printpermissiontrue 1525 | \@printcopyrightfalse 1526 | \@acmownedfalse 1527 | \AtBeginDocument{\acmPrice{}}% 1528 | \fi 1529 | \ifnum\acm@copyrightmode=6\relax % cagov 1530 | \@acmownedfalse 1531 | \fi 1532 | \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed 1533 | \@acmownedfalse 1534 | \fi 1535 | \ifnum\acm@copyrightmode=9\relax % licensedcagov 1536 | \@acmownedfalse 1537 | \fi 1538 | \ifnum\acm@copyrightmode=10\relax % licensedcagovmixed 1539 | \@acmownedfalse 1540 | \fi 1541 | \ifnum\acm@copyrightmode=11\relax % othergov 1542 | \@acmownedtrue 1543 | \fi 1544 | \ifnum\acm@copyrightmode=12\relax % licensedothergov 1545 | \@acmownedfalse 1546 | \fi 1547 | \ifnum\acm@copyrightmode=13\relax % iw3c2w3 1548 | \@acmownedfalse 1549 | \AtBeginDocument{\acmPrice{}}% 1550 | \fi 1551 | \ifnum\acm@copyrightmode=14\relax % iw3c2w3g 1552 | \@acmownedfalse 1553 | \AtBeginDocument{\acmPrice{}}% 1554 | \fi} 1555 | \def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}} 1556 | \setcopyright{acmcopyright} 1557 | \def\@copyrightowner{% 1558 | \ifcase\acm@copyrightmode\relax % none 1559 | \or % acmcopyright 1560 | Association for Computing Machinery. 1561 | \or % acmlicensed 1562 | Copyright held by the owner/author(s). Publication rights licensed to 1563 | ACM\@. 1564 | \or % rightsretained 1565 | Copyright held by the owner/author(s). 1566 | \or % usgov 1567 | \or % usgovmixed 1568 | Association for Computing Machinery. 1569 | \or % cagov 1570 | Crown in Right of Canada. 1571 | \or %cagovmixed 1572 | Association for Computing Machinery. 1573 | \or %licensedusgovmixed 1574 | Copyright held by the owner/author(s). Publication rights licensed to 1575 | ACM\@. 1576 | \or % licensedcagov 1577 | Crown in Right of Canada. Publication rights licensed to 1578 | ACM\@. 1579 | \or %licensedcagovmixed 1580 | Copyright held by the owner/author(s). Publication rights licensed to 1581 | ACM\@. 1582 | \or % othergov 1583 | Association for Computing Machinery. 1584 | \or % licensedothergov 1585 | Copyright held by the owner/author(s). Publication rights licensed to 1586 | ACM\@. 1587 | \or % ic2w3www 1588 | IW3C2 (International World Wide Web Conference Committee), published 1589 | under Creative Commons CC-BY~4.0 License. 1590 | \or % ic2w3wwwgoogle 1591 | IW3C2 (International World Wide Web Conference Committee), published 1592 | under Creative Commons CC-BY-NC-ND~4.0 License. 1593 | \fi} 1594 | \def\@formatdoi#1{\url{https://doi.org/#1}} 1595 | \def\@copyrightpermission{% 1596 | \ifcase\acm@copyrightmode\relax % none 1597 | \or % acmcopyright 1598 | Permission to make digital or hard copies of all or part of this 1599 | work for personal or classroom use is granted without fee provided 1600 | that copies are not made or distributed for profit or commercial 1601 | advantage and that copies bear this notice and the full citation on 1602 | the first page. Copyrights for components of this work owned by 1603 | others than ACM must be honored. Abstracting with credit is 1604 | permitted. To copy otherwise, or republish, to post on servers or to 1605 | redistribute to lists, requires prior specific permission 1606 | and\hspace*{.5pt}/or a fee. Request permissions from 1607 | permissions@acm.org. 1608 | \or % acmlicensed 1609 | Permission to make digital or hard copies of all or part of this 1610 | work for personal or classroom use is granted without fee provided 1611 | that copies are not made or distributed for profit or commercial 1612 | advantage and that copies bear this notice and the full citation on 1613 | the first page. Copyrights for components of this work owned by 1614 | others than the author(s) must be honored. Abstracting with credit 1615 | is permitted. To copy otherwise, or republish, to post on servers 1616 | or to redistribute to lists, requires prior specific permission 1617 | and\hspace*{.5pt}/or a fee. Request permissions from 1618 | permissions@acm.org. 1619 | \or % rightsretained 1620 | Permission to make digital or hard copies of part or all of this work 1621 | for personal or classroom use is granted without fee provided that 1622 | copies are not made or distributed for profit or commercial advantage 1623 | and that copies bear this notice and the full citation on the first 1624 | page. Copyrights for third-party components of this work must be 1625 | honored. For all other uses, contact the 1626 | owner\hspace*{.5pt}/author(s). 1627 | \or % usgov 1628 | This paper is authored by an employee(s) of the United States 1629 | Government and is in the public domain. Non-exclusive copying or 1630 | redistribution is allowed, provided that the article citation is 1631 | given and the authors and agency are clearly identified as its 1632 | source. 1633 | \or % usgovmixed 1634 | ACM acknowledges that this contribution was authored or co-authored 1635 | by an employee, contractor, or affiliate of the United States 1636 | government. As such, the United States government retains a 1637 | nonexclusive, royalty-free right to publish or reproduce this 1638 | article, or to allow others to do so, for government purposes only. 1639 | \or % cagov 1640 | This article was authored by employees of the Government of Canada. 1641 | As such, the Canadian government retains all interest in the 1642 | copyright to this work and grants to ACM a nonexclusive, 1643 | royalty-free right to publish or reproduce this article, or to allow 1644 | others to do so, provided that clear attribution is given both to 1645 | the authors and the Canadian government agency employing them. 1646 | Permission to make digital or hard copies for personal or classroom 1647 | use is granted. Copies must bear this notice and the full citation 1648 | on the first page. Copyrights for components of this work owned by 1649 | others than the Canadian Government must be honored. To copy 1650 | otherwise, distribute, republish, or post, requires prior specific 1651 | permission and\hspace*{.5pt}/or a fee. Request permissions from 1652 | permissions@acm.org. 1653 | \or % cagovmixed 1654 | ACM acknowledges that this contribution was co-authored by an 1655 | affiliate of the national government of Canada. As such, the Crown 1656 | in Right of Canada retains an equal interest in the copyright. 1657 | Reprints must include clear attribution to ACM and the author's 1658 | government agency affiliation. Permission to make digital or hard 1659 | copies for personal or classroom use is granted. Copies must bear 1660 | this notice and the full citation on the first page. Copyrights for 1661 | components of this work owned by others than ACM must be honored. 1662 | To copy otherwise, distribute, republish, or post, requires prior 1663 | specific permission and\hspace*{.5pt}/or a fee. Request permissions 1664 | from permissions@acm.org. 1665 | \or % licensedusgovmixed 1666 | Publication rights licensed to ACM\@. ACM acknowledges that this 1667 | contribution was authored or co-authored by an employee, contractor 1668 | or affiliate of the United States government. As such, the 1669 | Government retains a nonexclusive, royalty-free right to publish or 1670 | reproduce this article, or to allow others to do so, for Government 1671 | purposes only. 1672 | \or % licensedcagov 1673 | This article was authored by employees of the Government of Canada. 1674 | As such, the Canadian government retains all interest in the 1675 | copyright to this work and grants to ACM a nonexclusive, 1676 | royalty-free right to publish or reproduce this article, or to allow 1677 | others to do so, provided that clear attribution is given both to 1678 | the authors and the Canadian government agency employing them. 1679 | Permission to make digital or hard copies for personal or classroom 1680 | use is granted. Copies must bear this notice and the full citation 1681 | on the first page. Copyrights for components of this work owned by 1682 | others than the Canadian Government must be honored. To copy 1683 | otherwise, distribute, republish, or post, requires prior specific 1684 | permission and\hspace*{.5pt}/or a fee. Request permissions from 1685 | permissions@acm.org. 1686 | \or % licensedcagovmixed 1687 | Publication rights licensed to ACM\@. ACM acknowledges that this 1688 | contribution was authored or co-authored by an employee, contractor 1689 | or affiliate of the national government of Canada. As such, the 1690 | Government retains a nonexclusive, royalty-free right to publish or 1691 | reproduce this article, or to allow others to do so, for Government 1692 | purposes only. 1693 | \or % othergov 1694 | ACM acknowledges that this contribution was authored or co-authored 1695 | by an employee, contractor or affiliate of a national government. As 1696 | such, the Government retains a nonexclusive, royalty-free right to 1697 | publish or reproduce this article, or to allow others to do so, for 1698 | Government purposes only. 1699 | \or % licensedothergov 1700 | Publication rights licensed to ACM\@. ACM acknowledges that this 1701 | contribution was authored or co-authored by an employee, contractor 1702 | or affiliate of a national government. As such, the Government 1703 | retains a nonexclusive, royalty-free right to publish or reproduce 1704 | this article, or to allow others to do so, for Government purposes 1705 | only. 1706 | \or % iw3c2w3 1707 | This paper is published under the Creative Commons Attribution~4.0 1708 | International (CC-BY~4.0) license. Authors reserve their rights to 1709 | disseminate the work on their personal and corporate Web sites with 1710 | the appropriate attribution. 1711 | \or % iw3c2w3g 1712 | This paper is published under the Creative Commons 1713 | Attribution-NonCommercial-NoDerivs~4.0 International 1714 | (CC-BY-NC-ND~4.0) license. Authors reserve their rights to 1715 | disseminate the work on their personal and corporate Web sites with 1716 | the appropriate attribution. 1717 | \fi} 1718 | \def\copyrightyear#1{\def\@copyrightyear{#1}} 1719 | \copyrightyear{\@acmYear} 1720 | \def\@teaserfigures{} 1721 | \newenvironment{teaserfigure}{\Collect@Body\@saveteaser}{} 1722 | \long\def\@saveteaser#1{\g@addto@macro\@teaserfigures{\@teaser{#1}}} 1723 | \renewcommand{\thanks}[1]{% 1724 | \@ifnotempty{#1}{% 1725 | \if@ACM@anonymous 1726 | \g@addto@macro\thankses{\thanks{A note}}% 1727 | \else 1728 | \g@addto@macro\thankses{\thanks{#1}}% 1729 | \fi}} 1730 | \newbox\mktitle@bx 1731 | \def\maketitle{% 1732 | \@ACM@maketitle@typesettrue 1733 | \if@ACM@anonymous 1734 | % Anonymize omission of \author-s 1735 | \ifnum\num@authorgroups=0\author{}\fi 1736 | \fi 1737 | \begingroup 1738 | \let\@vspace\@vspace@orig 1739 | \let\@vspacer\@vspacer@orig 1740 | \let\@footnotemark\@footnotemark@nolink 1741 | \let\@footnotetext\@footnotetext@nolink 1742 | \renewcommand\thefootnote{\@fnsymbol\c@footnote}% 1743 | \hsize=\textwidth 1744 | \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}% 1745 | \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers 1746 | \@printtopmatter 1747 | \if@ACM@sigchiamode\@mkauthors\fi 1748 | \setcounter{footnote}{0}% 1749 | \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}% 1750 | \@titlenotes 1751 | \@subtitlenotes 1752 | \@authornotes 1753 | \let\@makefnmark\relax 1754 | \let\@thefnmark\relax 1755 | \let\@makefntext\noindent 1756 | \ifx\@empty\thankses\else 1757 | \footnotetextauthorsaddresses{% 1758 | \def\par{\let\par\@par}\parindent\z@\@setthanks}% 1759 | \fi 1760 | \ifx\@empty\@authorsaddresses\else 1761 | \if@ACM@anonymous\else 1762 | \if@ACM@journal@bibstrip 1763 | \footnotetextauthorsaddresses{% 1764 | \def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}% 1765 | \fi 1766 | \fi 1767 | \fi 1768 | \if@ACM@nonacm\else\footnotetextcopyrightpermission{% 1769 | \if@ACM@authordraft 1770 | \raisebox{-2ex}[\z@][\z@]{\makebox[0pt][l]{\large\bfseries 1771 | Unpublished working draft. Not for distribution.}}% 1772 | \color[gray]{0.9}% 1773 | \fi 1774 | \parindent\z@\parskip0.1\baselineskip 1775 | \if@ACM@authorversion\else 1776 | \if@printpermission\@copyrightpermission\par\fi 1777 | \fi 1778 | \if@ACM@manuscript\else 1779 | \if@ACM@journal@bibstrip\else % Print the conference information 1780 | {\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par 1781 | \fi 1782 | \fi 1783 | \if@printcopyright 1784 | \copyright\ \@copyrightyear\ \@copyrightowner\\ 1785 | \else 1786 | \@copyrightyear.\ 1787 | \fi 1788 | \if@ACM@manuscript 1789 | Manuscript submitted to ACM\\ 1790 | \else 1791 | \if@ACM@authorversion 1792 | This is the author's version of the work. It is posted here for 1793 | your personal use. Not for redistribution. The definitive Version 1794 | of Record was published in 1795 | \if@ACM@journal@bibstrip 1796 | \emph{\@journalName}% 1797 | \else 1798 | \emph{\@acmBooktitle}% 1799 | \fi 1800 | \ifx\@acmDOI\@empty 1801 | . 1802 | \else 1803 | , \@formatdoi{\@acmDOI}. 1804 | \fi\\ 1805 | \else 1806 | \if@ACM@nonacm\else 1807 | \if@ACM@journal@bibstrip 1808 | \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle 1809 | \ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\ 1810 | \@formatdoi{\@acmDOI}% 1811 | \else % Conference 1812 | \ifx\@acmISBN\@empty\else ACM~ISBN~\@acmISBN 1813 | \ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\\fi 1814 | \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi% 1815 | \fi 1816 | \fi 1817 | \fi 1818 | \fi} 1819 | \fi 1820 | \endgroup 1821 | \setcounter{footnote}{0}% 1822 | \@mkabstract 1823 | \if@ACM@printccs 1824 | \ifx\@concepts\@empty\else\bgroup 1825 | {\@specialsection{CCS Concepts}% 1826 | \noindent\@concepts\par}\egroup 1827 | \fi 1828 | \fi 1829 | \ifx\@keywords\@empty\else\bgroup 1830 | {\if@ACM@journal 1831 | \@specialsection{Additional Key Words and Phrases}% 1832 | \else 1833 | \@specialsection{Keywords}% 1834 | \fi 1835 | \noindent\@keywords}\par\egroup 1836 | \fi 1837 | \andify\authors 1838 | \andify\shortauthors 1839 | \global\let\authors=\authors 1840 | \global\let\shortauthors=\shortauthors 1841 | \if@ACM@printacmref 1842 | \@mkbibcitation 1843 | \fi 1844 | \hypersetup{% 1845 | pdfauthor={\authors}, 1846 | pdftitle={\@title}, 1847 | pdfsubject={\@concepts}, 1848 | pdfkeywords={\@keywords}, 1849 | pdfcreator={LaTeX with acmart 1850 | \csname ver@acmart.cls\endcsname\space 1851 | and hyperref 1852 | \csname ver@hyperref.sty\endcsname}}% 1853 | \global\@topnum\z@ % this prevents floats from falling 1854 | % at the top of page 1 1855 | \global\@botnum\z@ % we do not want them to be on the bottom either 1856 | \@printendtopmatter 1857 | \@afterindentfalse 1858 | \@afterheading 1859 | } 1860 | \def\@specialsection#1{% 1861 | \ifcase\ACM@format@nr 1862 | \relax % manuscript 1863 | \par\medskip\small\noindent#1: % 1864 | \or % acmsmall 1865 | \par\medskip\small\noindent#1: % 1866 | \or % acmlarge 1867 | \par\medskip\small\noindent#1: % 1868 | \or % acmtog 1869 | \par\medskip\small\noindent#1: % 1870 | \or % sigconf 1871 | \section*{#1}% 1872 | \or % siggraph 1873 | \section*{#1}% 1874 | \or % sigplan 1875 | \noindentparagraph*{#1:~}% 1876 | \or % sigchi 1877 | \section*{#1}% 1878 | \or % sigchi-a 1879 | \section*{#1}% 1880 | \fi 1881 | } 1882 | \def\@printtopmatter{% 1883 | \ifx\@startPage\@empty 1884 | \gdef\@startPage{1}% 1885 | \else 1886 | \setcounter{page}{\@startPage}% 1887 | \fi 1888 | \thispagestyle{firstpagestyle}% 1889 | \noindent 1890 | \ifcase\ACM@format@nr 1891 | \relax % manuscript 1892 | \box\mktitle@bx\par 1893 | \or % acmsmall 1894 | \box\mktitle@bx\par 1895 | \or % acmlarge 1896 | \box\mktitle@bx\par 1897 | \or % acmtog 1898 | \twocolumn[\box\mktitle@bx]% 1899 | \or % sigconf 1900 | \twocolumn[\box\mktitle@bx]% 1901 | \or % siggraph 1902 | \twocolumn[\box\mktitle@bx]% 1903 | \or % sigplan 1904 | \twocolumn[\box\mktitle@bx]% 1905 | \or % sigchi 1906 | \twocolumn[\box\mktitle@bx]% 1907 | \or % sigchi-a 1908 | \par\box\mktitle@bx\par\bigskip 1909 | \if@ACM@badge 1910 | \marginpar{\noindent 1911 | \ifx\@acmBadgeL@image\@empty\else 1912 | \href{\@acmBadgeL@url}{% 1913 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}% 1914 | \hskip\@ACM@badge@skip 1915 | \fi 1916 | \ifx\@acmBadgeR@image\@empty\else 1917 | \href{\@acmBadgeR@url}{% 1918 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}% 1919 | \fi}% 1920 | \fi 1921 | \fi 1922 | } 1923 | \def\@mktitle{% 1924 | \ifcase\ACM@format@nr 1925 | \relax % manuscript 1926 | \@mktitle@i 1927 | \or % acmsmall 1928 | \@mktitle@i 1929 | \or % acmlarge 1930 | \@mktitle@i 1931 | \or % acmtog 1932 | \@mktitle@i 1933 | \or % sigconf 1934 | \@mktitle@iii 1935 | \or % siggraph 1936 | \@mktitle@iii 1937 | \or % sigplan 1938 | \@mktitle@iii 1939 | \or % sigchi 1940 | \@mktitle@iii 1941 | \or % sigchi-a 1942 | \@mktitle@iv 1943 | \fi 1944 | } 1945 | \def\@titlefont{% 1946 | \ifcase\ACM@format@nr 1947 | \relax % manuscript 1948 | \LARGE\sffamily\bfseries 1949 | \or % acmsmall 1950 | \LARGE\sffamily\bfseries 1951 | \or % acmlarge 1952 | \LARGE\sffamily\bfseries 1953 | \or % acmtog 1954 | \Huge\sffamily 1955 | \or % sigconf 1956 | \Huge\sffamily\bfseries 1957 | \or % siggraph 1958 | \Huge\sffamily\bfseries 1959 | \or % sigplan 1960 | \Huge\bfseries 1961 | \or % sigchi 1962 | \Huge\sffamily\bfseries 1963 | \or % sigchi-a 1964 | \Huge\bfseries 1965 | \fi} 1966 | \def\@subtitlefont{\normalsize 1967 | \ifcase\ACM@format@nr 1968 | \relax % manuscript 1969 | \mdseries 1970 | \or % acmsmall 1971 | \mdseries 1972 | \or % acmlarge 1973 | \mdseries 1974 | \or % acmtog 1975 | \LARGE 1976 | \or % sigconf 1977 | \LARGE\mdseries 1978 | \or % siggraph 1979 | \LARGE\mdseries 1980 | \or % sigplan 1981 | \LARGE\mdseries 1982 | \or % sigchi 1983 | \LARGE\mdseries 1984 | \or % sigchi-a 1985 | \mdseries 1986 | \fi} 1987 | \def\@mktitle@i{\hsize=\textwidth 1988 | \@ACM@title@width=\hsize 1989 | \ifx\@acmBadgeL@image\@empty\else 1990 | \advance\@ACM@title@width by -\@ACM@badge@width 1991 | \advance\@ACM@title@width by -\@ACM@badge@skip 1992 | \fi 1993 | \ifx\@acmBadgeR@image\@empty\else 1994 | \advance\@ACM@title@width by -\@ACM@badge@width 1995 | \advance\@ACM@title@width by -\@ACM@badge@skip 1996 | \fi 1997 | \setbox\mktitle@bx=\vbox{\noindent\@titlefont 1998 | \ifx\@acmBadgeL@image\@empty\else 1999 | \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{% 2000 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}% 2001 | \hskip\@ACM@badge@skip 2002 | \fi 2003 | \parbox[t]{\@ACM@title@width}{\raggedright 2004 | \@titlefont\noindent 2005 | \@title 2006 | \ifx\@subtitle\@empty\else 2007 | \par\noindent{\@subtitlefont\@subtitle} 2008 | \fi}% 2009 | \ifx\@acmBadgeR@image\@empty\else 2010 | \hskip\@ACM@badge@skip 2011 | \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{% 2012 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}% 2013 | \fi 2014 | \par\bigskip}}% 2015 | \def\@mktitle@iii{\hsize=\textwidth 2016 | \setbox\mktitle@bx=\vbox{\@titlefont\centering 2017 | \@ACM@title@width=\hsize 2018 | \if@ACM@badge 2019 | \advance\@ACM@title@width by -2\@ACM@badge@width 2020 | \advance\@ACM@title@width by -2\@ACM@badge@skip 2021 | \parbox[b]{\@ACM@badge@width}{\strut 2022 | \ifx\@acmBadgeL@image\@empty\else 2023 | \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{% 2024 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}% 2025 | \fi}% 2026 | \hskip\@ACM@badge@skip 2027 | \fi 2028 | \parbox[t]{\@ACM@title@width}{\centering\@titlefont 2029 | \@title 2030 | \ifx\@subtitle\@empty\else 2031 | \par\noindent{\@subtitlefont\@subtitle} 2032 | \fi 2033 | }% 2034 | \if@ACM@badge 2035 | \hskip\@ACM@badge@skip 2036 | \parbox[b]{\@ACM@badge@width}{\strut 2037 | \ifx\@acmBadgeR@image\@empty\else 2038 | \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{% 2039 | \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}% 2040 | \fi}% 2041 | \fi 2042 | \par\bigskip}}% 2043 | \def\@mktitle@iv{\hsize=\textwidth 2044 | \setbox\mktitle@bx=\vbox{\raggedright\leftskip5pc\@titlefont 2045 | \noindent\leavevmode\leaders\hrule height 2pt\hfill\kern0pt\par 2046 | \noindent\@title 2047 | \ifx\@subtitle\@empty\else 2048 | \par\noindent\@subtitlefont\@subtitle 2049 | \fi 2050 | \par\bigskip}}% 2051 | \newbox\@ACM@commabox 2052 | \def\@ACM@addtoaddress#1{% 2053 | \ifvmode\else 2054 | \if@ACM@affiliation@obeypunctuation\else 2055 | \setbox\@ACM@commabox=\hbox{, }% 2056 | \unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox 2057 | \fi\fi 2058 | #1} 2059 | \def\streetaddress#1{\unskip\ignorespaces} 2060 | \def\postcode#1{\unskip\ignorespaces} 2061 | \if@ACM@journal 2062 | \def\position#1{\unskip\ignorespaces} 2063 | \def\institution#1{\unskip~#1\ignorespaces} 2064 | \def\city#1{\unskip\ignorespaces} 2065 | \def\state#1{\unskip\ignorespaces} 2066 | \newcommand\department[2][0]{\unskip\ignorespaces} 2067 | \def\country#1{\if@ACM@affiliation@obeypunctuation\else, \fi#1\ignorespaces} 2068 | \else 2069 | \def\position#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}% 2070 | \def\institution#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}% 2071 | \newcommand\department[2][0]{\if@ACM@affiliation@obeypunctuation 2072 | #2\else#2\par\fi}% 2073 | \let\city\@ACM@addtoaddress 2074 | \let\state\@ACM@addtoaddress 2075 | \let\country\@ACM@addtoaddress 2076 | \fi 2077 | \def\@mkauthors{\begingroup 2078 | \hsize=\textwidth 2079 | \ifcase\ACM@format@nr 2080 | \relax % manuscript 2081 | \@mkauthors@i 2082 | \or % acmsmall 2083 | \@mkauthors@i 2084 | \or % acmlarge 2085 | \@mkauthors@i 2086 | \or % acmtog 2087 | \@mkauthors@i 2088 | \or % sigconf 2089 | \@mkauthors@iii 2090 | \or % siggraph 2091 | \@mkauthors@iii 2092 | \or % sigplan 2093 | \@mkauthors@iii 2094 | \or % sigchi 2095 | \@mkauthors@iii 2096 | \or % sigchi-a 2097 | \@mkauthors@iv 2098 | \fi 2099 | \endgroup 2100 | } 2101 | \def\@authorfont{\Large\sffamily} 2102 | \def\@affiliationfont{\normalsize\normalfont} 2103 | \ifcase\ACM@format@nr 2104 | \relax % manuscript 2105 | \or % acmsmall 2106 | \def\@authorfont{\large\sffamily} 2107 | \def\@affiliationfont{\small\normalfont} 2108 | \or % acmlarge 2109 | \or % acmtog 2110 | \def\@authorfont{\LARGE\sffamily} 2111 | \def\@affiliationfont{\large} 2112 | \or % sigconf 2113 | \def\@authorfont{\LARGE} 2114 | \def\@affiliationfont{\large} 2115 | \or % siggraph 2116 | \def\@authorfont{\normalsize\normalfont} 2117 | \def\@affiliationfont{\normalsize\normalfont} 2118 | \or % sigplan 2119 | \def\@authorfont{\Large\normalfont} 2120 | \def\@affiliationfont{\normalsize\normalfont} 2121 | \or % sigchi 2122 | \def\@authorfont{\bfseries} 2123 | \def\@affiliationfont{\mdseries} 2124 | \or % sigchi-a 2125 | \def\@authorfont{\bfseries} 2126 | \def\@affiliationfont{\mdseries} 2127 | \fi 2128 | \def\@typeset@author@line{% 2129 | \andify\@currentauthors\par\noindent 2130 | \@currentauthors\def\@currentauthors{}% 2131 | \ifx\@currentaffiliations\@empty\else 2132 | \andify\@currentaffiliations 2133 | \unskip, {\@currentaffiliations}\par 2134 | \fi 2135 | \def\@currentaffiliations{}} 2136 | \def\@mkauthors@i{% 2137 | \def\@currentauthors{}% 2138 | \def\@currentaffiliations{}% 2139 | \global\let\and\@typeset@author@line 2140 | \def\@author##1{% 2141 | \ifx\@currentauthors\@empty 2142 | \gdef\@currentauthors{\@authorfont\MakeTextUppercase{##1}}% 2143 | \else 2144 | \g@addto@macro{\@currentauthors}{\and\MakeTextUppercase{##1}}% 2145 | \fi 2146 | \gdef\and{}}% 2147 | \def\email##1##2{}% 2148 | \def\affiliation##1##2{% 2149 | \def\@tempa{##2}\ifx\@tempa\@empty\else 2150 | \ifx\@currentaffiliations\@empty 2151 | \gdef\@currentaffiliations{% 2152 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2153 | \setkeys{@ACM@affiliation@}{##1}% 2154 | \@affiliationfont##2}% 2155 | \else 2156 | \g@addto@macro{\@currentaffiliations}{\and 2157 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2158 | \setkeys{@ACM@affiliation@}{##1}##2}% 2159 | \fi 2160 | \fi 2161 | \global\let\and\@typeset@author@line}% 2162 | \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip 2163 | \noindent\addresses\@typeset@author@line 2164 | \par\medskip}% 2165 | } 2166 | \newbox\author@bx 2167 | \newdimen\author@bx@wd 2168 | \newskip\author@bx@sep 2169 | \author@bx@sep=1pc\relax 2170 | \def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd 2171 | \def\and{\par}\normalbaselines 2172 | \global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi 2173 | \@authorfont\@currentauthors\par\@affiliationfont 2174 | \@currentaffiliation}\egroup 2175 | \box\author@bx\hspace{\author@bx@sep}% 2176 | \gdef\@currentauthors{}% 2177 | \gdef\@currentaffiliation{}} 2178 | \def\@mkauthors@iii{% 2179 | \author@bx@wd=\textwidth\relax 2180 | \advance\author@bx@wd by -\author@bx@sep\relax 2181 | \ifnum\@ACM@authorsperrow>0\relax 2182 | \divide\author@bx@wd by \@ACM@authorsperrow\relax 2183 | \else 2184 | \ifcase\num@authorgroups 2185 | \relax % 0? 2186 | \or % 1=one author per row 2187 | \or % 2=two authors per row 2188 | \divide\author@bx@wd by \num@authorgroups\relax 2189 | \or % 3=three authors per row 2190 | \divide\author@bx@wd by \num@authorgroups\relax 2191 | \or % 4=two authors per row (!) 2192 | \divide\author@bx@wd by 2\relax 2193 | \else % three authors per row 2194 | \divide\author@bx@wd by 3\relax 2195 | \fi 2196 | \fi 2197 | \advance\author@bx@wd by -\author@bx@sep\relax 2198 | \gdef\@currentauthors{}% 2199 | \gdef\@currentaffiliation{}% 2200 | \def\@author##1{\ifx\@currentauthors\@empty 2201 | \gdef\@currentauthors{\par##1}% 2202 | \else 2203 | \g@addto@macro\@currentauthors{\par##1}% 2204 | \fi 2205 | \gdef\and{}}% 2206 | \def\email##1##2{\ifx\@currentaffiliation\@empty 2207 | \gdef\@currentaffiliation{\bgroup 2208 | \mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}% 2209 | \else 2210 | \g@addto@macro\@currentaffiliation{\par\bgroup 2211 | \mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}% 2212 | \fi}% 2213 | \def\affiliation##1##2{\ifx\@currentaffiliation\@empty 2214 | \gdef\@currentaffiliation{% 2215 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2216 | \setkeys{@ACM@affiliation@}{##1}##2}% 2217 | \else 2218 | \g@addto@macro\@currentaffiliation{\par 2219 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2220 | \setkeys{@ACM@affiliation@}{##1}##2}% 2221 | \fi 2222 | \global\let\and\@typeset@author@bx 2223 | }% 2224 | \hsize=\textwidth 2225 | \global\setbox\mktitle@bx=\vbox{\noindent 2226 | \box\mktitle@bx\par\medskip\leavevmode 2227 | \lineskip=1pc\relax\centering\hspace*{-1em}% 2228 | \addresses\let\and\@typeset@author@bx\and\par\bigskip}} 2229 | \def\@mkauthors@iv{% 2230 | \author@bx@wd=\columnwidth\relax 2231 | \advance\author@bx@wd by -\author@bx@sep\relax 2232 | \ifnum\@ACM@authorsperrow>0\relax 2233 | \divide\author@bx@wd by \@ACM@authorsperrow\relax 2234 | \else 2235 | \ifcase\num@authorgroups 2236 | \relax % 0? 2237 | \or % 1=one author per row 2238 | \else % 2=two authors per row 2239 | \divide\author@bx@wd by 2\relax 2240 | \fi 2241 | \fi 2242 | \advance\author@bx@wd by -\author@bx@sep\relax 2243 | \gdef\@currentauthors{}% 2244 | \gdef\@currentaffiliation{}% 2245 | \def\@author##1{\ifx\@currentauthors\@empty 2246 | \gdef\@currentauthors{\par##1}% 2247 | \else 2248 | \g@addto@macro\@currentauthors{\par##1}% 2249 | \fi 2250 | \gdef\and{}}% 2251 | \def\email##1##2{\ifx\@currentaffiliation\@empty 2252 | \gdef\@currentaffiliation{\nolinkurl{##2}}% 2253 | \else 2254 | \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% 2255 | \fi}% 2256 | \def\affiliation##1##2{\ifx\@currentaffiliation\@empty 2257 | \gdef\@currentaffiliation{% 2258 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2259 | \setkeys{@ACM@affiliation@}{##1}##2}% 2260 | \else 2261 | \g@addto@macro\@currentaffiliation{\par 2262 | \setkeys{@ACM@affiliation@}{obeypunctuation=false}% 2263 | \setkeys{@ACM@affiliation@}{##1}##2}% 2264 | \fi 2265 | \global\let\and\@typeset@author@bx}% 2266 | \bgroup\hsize=\columnwidth 2267 | \par\raggedright\leftskip=\z@ 2268 | \lineskip=1pc\noindent 2269 | \addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup} 2270 | \def\@mkauthorsaddresses{% 2271 | \ifnum\num@authors>1\relax 2272 | Authors' \else Author's \fi 2273 | \ifnum\num@authorgroups>1\relax 2274 | addresses: \else address: \fi 2275 | \bgroup 2276 | \def\streetaddress##1{\unskip, ##1}% 2277 | \def\postcode##1{\unskip, ##1}% 2278 | \def\position##1{\unskip\ignorespaces}% 2279 | \def\institution##1{\unskip, ##1}% 2280 | \def\city##1{\unskip, ##1}% 2281 | \def\state##1{\unskip, ##1}% 2282 | \renewcommand\department[2][0]{\unskip\@addpunct, ##2}% 2283 | \def\country##1{\unskip, ##1}% 2284 | \def\and{\unskip; }% 2285 | \def\@author##1{##1}% 2286 | \def\email##1##2{\unskip, \nolinkurl{##2}}% 2287 | \addresses 2288 | \egroup} 2289 | \AtEndDocument{\if@ACM@nonacm\else\if@ACM@journal 2290 | \ifx\@authorsaddresses\@empty 2291 | \ClassWarningNoLine{\@classname}{Authors' 2292 | addresses are mandatory for ACM journals}% 2293 | \fi\fi\fi} 2294 | \def\@setaddresses{} 2295 | \def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}} 2296 | \def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}} 2297 | \def\@mkteasers{% 2298 | \ifx\@teaserfigures\@empty\else 2299 | \def\@teaser##1{\par\bigskip\bgroup 2300 | \captionsetup{type=figure}##1\egroup\par} 2301 | \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par 2302 | \noindent\@Description@presentfalse 2303 | \@teaserfigures\par\if@Description@present\else 2304 | \global\@undescribed@imagestrue 2305 | \ClassWarning{\@classname}{A possible image without 2306 | description}\fi 2307 | \medskip}% 2308 | \fi} 2309 | \def\@mkabstract{\bgroup 2310 | \ifx\@abstract\@lempty\else 2311 | {\phantomsection\addcontentsline{toc}{section}{Abstract}% 2312 | \if@ACM@journal 2313 | \everypar{\setbox\z@\lastbox\everypar{}}\small 2314 | \else 2315 | \section*{\abstractname}% 2316 | \fi 2317 | \ignorespaces\@abstract\par}% 2318 | \fi\egroup} 2319 | \def\@mkbibcitation{\bgroup 2320 | \let\@vspace\@vspace@orig 2321 | \let\@vspacer\@vspacer@orig 2322 | \def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}% 2323 | \def\footnotemark{}% 2324 | \def\\{\unskip{} \ignorespaces}% 2325 | \def\footnote{\ClassError{\@classname}{Please do not use footnotes 2326 | inside a \string\title{} or \string\author{} command! Use 2327 | \string\titlenote{} or \string\authornote{} instead!}}% 2328 | \def\@article@string{\ifx\@acmArticle\@empty{\ }\else, 2329 | Article~\@acmArticle\ \fi}% 2330 | \par\medskip\small\noindent{\bfseries ACM Reference Format:}\par\nobreak 2331 | \noindent\bgroup 2332 | \def\\{\unskip{}, \ignorespaces}\authors\egroup. \@acmYear. \@title 2333 | \ifx\@subtitle\@empty. \else: \@subtitle. \fi 2334 | \if@ACM@nonacm\else 2335 | % The 'nonacm' option disables 'printacmref' by default, 2336 | % and the present \@mkbibcitation definition is never used 2337 | % in this case. The conditional remains useful if the user 2338 | % explicitly sets \settopmatter{printacmref=true}. 2339 | \if@ACM@journal@bibstrip 2340 | \textit{\@journalNameShort} 2341 | \@acmVolume, \@acmNumber \@article@string (\@acmPubDate), 2342 | \ref{TotPages}~\@pages@word. 2343 | \else 2344 | In \textit{\@acmBooktitle}% 2345 | \ifx\@acmEditors\@empty\textit{.}\else 2346 | \andify\@acmEditors\textit{, }\@acmEditors~\@editorsAbbrev.% 2347 | \fi\ 2348 | ACM, New York, NY, USA% 2349 | \@article@string\unskip, \ref{TotPages}~\@pages@word. 2350 | \fi 2351 | \fi 2352 | \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi 2353 | \par\egroup} 2354 | \def\@printendtopmatter{% 2355 | \let\@vspace\@vspace@orig 2356 | \let\@vspacer\@vspacer@orig 2357 | \par\bigskip 2358 | \let\@vspace\@vspace@acm 2359 | \let\@vspacer\@vspacer@acm 2360 | } 2361 | \def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses} 2362 | \def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.} 2363 | \RequirePackage{fancyhdr} 2364 | \let\ACM@ps@plain\ps@plain 2365 | \let\ACM@ps@myheadings\ps@myheadings 2366 | \let\ACM@ps@headings\ps@headings 2367 | \def\ACM@restore@pagestyle{% 2368 | \let\ps@plain\ACM@ps@plain 2369 | \let\ps@myheadings\ACM@ps@myheadings 2370 | \let\ps@headings\ACM@ps@headings} 2371 | \AtBeginDocument{\ACM@restore@pagestyle} 2372 | \if@ACM@review 2373 | \newsavebox{\ACM@linecount@bx} 2374 | \newlength\ACM@linecount@bxht 2375 | \newcount\ACM@linecount 2376 | \ACM@linecount\@ne\relax 2377 | \def\ACM@mk@linecount{% 2378 | \savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{\normalfont 2379 | \normalsize 2380 | \setlength{\ACM@linecount@bxht}{0pt}% 2381 | \loop{\color{red}\scriptsize\the\ACM@linecount}\\ 2382 | \global\advance\ACM@linecount by \@ne 2383 | \addtolength{\ACM@linecount@bxht}{\baselineskip}% 2384 | \ifdim\ACM@linecount@bxht<\textheight\repeat 2385 | {\color{red}\scriptsize\the\ACM@linecount}\hfill 2386 | \global\advance\ACM@linecount by \@ne}}} 2387 | \fi 2388 | \def\ACM@linecountL{% 2389 | \if@ACM@review 2390 | \ACM@mk@linecount 2391 | \begin{picture}(0,0)% 2392 | \put(-26,-22){\usebox{\ACM@linecount@bx}}% 2393 | \end{picture}% 2394 | \fi} 2395 | \def\ACM@linecountR{% 2396 | \if@ACM@review 2397 | \ifcase\ACM@format@nr 2398 | \relax % manuscript 2399 | \relax 2400 | \or % acmsmall 2401 | \relax 2402 | \or % acmlarge 2403 | \relax 2404 | \or % acmtog 2405 | \ACM@mk@linecount 2406 | \or % sigconf 2407 | \ACM@mk@linecount 2408 | \or % siggraph 2409 | \ACM@mk@linecount 2410 | \or % sigplan 2411 | \ACM@mk@linecount 2412 | \or % sigchi 2413 | \ACM@mk@linecount 2414 | \or % sigchi-a 2415 | \ACM@mk@linecount 2416 | \fi 2417 | \begin{picture}(0,0)% 2418 | \put(20,-22){\usebox{\ACM@linecount@bx}}% 2419 | \end{picture}% 2420 | \fi} 2421 | \if@ACM@timestamp 2422 | % Subtracting 30 from \time gives us the effect of rounding down despite 2423 | % \numexpr rounding to nearest 2424 | \newcounter{ACM@time@hours} 2425 | \setcounter{ACM@time@hours}{\numexpr (\time - 30) / 60 \relax} 2426 | \newcounter{ACM@time@minutes} 2427 | \setcounter{ACM@time@minutes}{\numexpr \time - \theACM@time@hours * 60 \relax} 2428 | \newcommand\ACM@timestamp{% 2429 | \footnotesize% 2430 | \ifx\@acmSubmissionID\@empty\relax\else 2431 | Submission ID: \@acmSubmissionID.{ }% 2432 | \fi 2433 | \the\year-\two@digits{\the\month}-\two@digits{\the\day}{ }% 2434 | \two@digits{\theACM@time@hours}:\two@digits{\theACM@time@minutes}{. }% 2435 | Page \thepage\ of \@startPage--\pageref*{TotPages}.% 2436 | } 2437 | \fi 2438 | \def\@shortauthors{% 2439 | \if@ACM@anonymous 2440 | Anon. 2441 | \ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi 2442 | \else\shortauthors\fi} 2443 | \def\@headfootfont{\sffamily\footnotesize} 2444 | \AtBeginDocument{% 2445 | \fancypagestyle{standardpagestyle}{% 2446 | \fancyhf{}% 2447 | \renewcommand{\headrulewidth}{\z@}% 2448 | \renewcommand{\footrulewidth}{\z@}% 2449 | \def\@acmArticlePage{% 2450 | \ifx\@acmArticle\empty% 2451 | \if@ACM@printfolios\thepage\fi% 2452 | \else% 2453 | \@acmArticle\if@ACM@printfolios:\thepage\fi% 2454 | \fi% 2455 | }% 2456 | \if@ACM@journal@bibstrip 2457 | \ifcase\ACM@format@nr 2458 | \relax % manuscript 2459 | \fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}% 2460 | \fancyhead[RO]{\if@ACM@printfolios\thepage\fi}% 2461 | \fancyhead[RE]{\@shortauthors}% 2462 | \fancyhead[LO]{\ACM@linecountL\shorttitle}% 2463 | \if@ACM@nonacm\else% 2464 | \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM} 2465 | \fi% 2466 | \or % acmsmall 2467 | \fancyhead[LE]{\ACM@linecountL\@headfootfont\@acmArticlePage}% 2468 | \fancyhead[RO]{\@headfootfont\@acmArticlePage}% 2469 | \fancyhead[RE]{\@headfootfont\@shortauthors}% 2470 | \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}% 2471 | \if@ACM@nonacm\else% 2472 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2473 | \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% 2474 | \fi 2475 | \or % acmlarge 2476 | \fancyhead[LE]{\ACM@linecountL\@headfootfont 2477 | \@acmArticlePage\quad\textbullet\quad\@shortauthors}% 2478 | \fancyhead[LO]{\ACM@linecountL}% 2479 | \fancyhead[RO]{\@headfootfont 2480 | \shorttitle\quad\textbullet\quad\@acmArticlePage}% 2481 | \if@ACM@nonacm\else% 2482 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2483 | \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% 2484 | \fi 2485 | \or % acmtog 2486 | \fancyhead[LE]{\ACM@linecountL\@headfootfont 2487 | \@acmArticlePage\quad\textbullet\quad\@shortauthors}% 2488 | \fancyhead[LO]{\ACM@linecountL}% 2489 | \fancyhead[RE]{\ACM@linecountR}% 2490 | \fancyhead[RO]{\@headfootfont 2491 | \shorttitle\quad\textbullet\quad\@acmArticlePage\ACM@linecountR}% 2492 | \if@ACM@nonacm\else% 2493 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2494 | \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% 2495 | \fi 2496 | \else % Proceedings 2497 | \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% 2498 | \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}% 2499 | \fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}% 2500 | \if@ACM@nonacm\else% 2501 | \fancyhead[LE]{\ACM@linecountL\@headfootfont\footnotesize 2502 | \acmConference@shortname, 2503 | \acmConference@date, \acmConference@venue}% 2504 | \fancyhead[RO]{\@headfootfont 2505 | \acmConference@shortname, 2506 | \acmConference@date, \acmConference@venue\ACM@linecountR}% 2507 | \fi 2508 | \fi 2509 | \else % Proceedings 2510 | \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% 2511 | \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}% 2512 | \fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}% 2513 | \if@ACM@nonacm\else% 2514 | \fancyhead[LE]{\ACM@linecountL\@headfootfont 2515 | \acmConference@shortname, 2516 | \acmConference@date, \acmConference@venue}% 2517 | \fancyhead[RO]{\@headfootfont 2518 | \acmConference@shortname, 2519 | \acmConference@date, \acmConference@venue\ACM@linecountR}% 2520 | \fi 2521 | \fi 2522 | \if@ACM@sigchiamode 2523 | \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}% 2524 | \fi 2525 | \if@ACM@timestamp 2526 | \fancyfoot[LO,RE]{\ACM@timestamp} 2527 | \fi 2528 | }% 2529 | \pagestyle{standardpagestyle} 2530 | } 2531 | \newdimen\@folio@wd 2532 | \@folio@wd=\z@ 2533 | \newdimen\@folio@ht 2534 | \@folio@ht=\z@ 2535 | \newdimen\@folio@voffset 2536 | \@folio@voffset=\z@ 2537 | \def\@folio@max{1} 2538 | \ifcase\ACM@format@nr 2539 | \relax % manuscript 2540 | \or % acmsmall 2541 | \@folio@wd=45.75pt\relax 2542 | \@folio@ht=1.25in\relax 2543 | \@folio@voffset=.2in\relax 2544 | \def\@folio@max{8} 2545 | \or % acmlarge 2546 | \@folio@wd=43.25pt\relax 2547 | \@folio@ht=79pt\relax 2548 | \@folio@voffset=.55in\relax 2549 | \def\@folio@max{10} 2550 | \fi 2551 | \def\@folioblob{\@tempcnta=0\@acmArticleSeq\relax 2552 | \ifnum\@tempcnta=0\relax\else 2553 | \loop 2554 | \ifnum\@tempcnta>\@folio@max\relax 2555 | \advance\@tempcnta by - \@folio@max 2556 | \repeat 2557 | \advance\@tempcnta by -1\relax 2558 | \@tempdima=\@folio@ht\relax 2559 | \multiply\@tempdima by \the\@tempcnta\relax 2560 | \advance\@tempdima by -\@folio@voffset\relax 2561 | \begin{picture}(0,0) 2562 | \makebox[\z@]{\raisebox{-\@tempdima}{% 2563 | \rlap{% 2564 | \raisebox{-0.45\@folio@ht}[\z@][\z@]{% 2565 | \rule{\@folio@wd}{\@folio@ht}}}% 2566 | \parbox{\@folio@wd}{% 2567 | \centering 2568 | \textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}} 2569 | \end{picture}\fi} 2570 | 2571 | \AtBeginDocument{% 2572 | \fancypagestyle{firstpagestyle}{% 2573 | \fancyhf{}% 2574 | \renewcommand{\headrulewidth}{\z@}% 2575 | \renewcommand{\footrulewidth}{\z@}% 2576 | \if@ACM@journal@bibstrip 2577 | \ifcase\ACM@format@nr 2578 | \relax % manuscript 2579 | \fancyhead[L]{\ACM@linecountL}% 2580 | \fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}% 2581 | \if@ACM@nonacm\else% 2582 | \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}% 2583 | \fi% 2584 | \or % acmsmall 2585 | \if@ACM@nonacm\else% 2586 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2587 | \@acmNumber, Article \@acmArticle. Publication date: 2588 | \@acmPubDate.}% 2589 | \fi% 2590 | \fancyhead[LE]{\ACM@linecountL\@folioblob}% 2591 | \fancyhead[LO]{\ACM@linecountL}% 2592 | \fancyhead[RO]{\@folioblob}% 2593 | \fancyheadoffset[RO,LE]{0.6\@folio@wd}% 2594 | \or % acmlarge 2595 | \if@ACM@nonacm\else% 2596 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2597 | \@acmNumber, Article \@acmArticle. Publication date: 2598 | \@acmPubDate.}% 2599 | \fi% 2600 | \fancyhead[RO]{\@folioblob}% 2601 | \fancyhead[LE]{\ACM@linecountL\@folioblob}% 2602 | \fancyhead[LO]{\ACM@linecountL}% 2603 | \fancyheadoffset[RO,LE]{1.4\@folio@wd}% 2604 | \or % acmtog 2605 | \if@ACM@nonacm\else% 2606 | \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. 2607 | \@acmNumber, Article \@acmArticle. Publication date: 2608 | \@acmPubDate.}% 2609 | \fi% 2610 | \fancyhead[L]{\ACM@linecountL}% 2611 | \fancyhead[R]{\ACM@linecountR}% 2612 | \else % Conference proceedings 2613 | \fancyhead[L]{\ACM@linecountL}% 2614 | \fancyhead[R]{\ACM@linecountR}% 2615 | \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% 2616 | \fi 2617 | \else 2618 | \fancyhead[L]{\ACM@linecountL}% 2619 | \fancyhead[R]{\ACM@linecountR}% 2620 | \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% 2621 | \fi 2622 | \if@ACM@timestamp 2623 | \ifnum\ACM@format@nr=0\relax % Manuscript 2624 | \fancyfoot[LO,RE]{\ACM@timestamp\quad 2625 | \if@ACM@nonacm\else 2626 | \footnotesize Manuscript submitted to ACM 2627 | \fi} 2628 | \else 2629 | \fancyfoot[LO,RE]{\ACM@timestamp} 2630 | \fi 2631 | \fi 2632 | }} 2633 | \def\ACM@NRadjust#1{% 2634 | \begingroup 2635 | \expandafter\ifx\csname Sectionformat\endcsname\relax 2636 | % do nothing when \Sectionformat is unknown 2637 | \def\next{\endgroup #1}% 2638 | \else 2639 | \def\next{\endgroup 2640 | \let\realSectionformat\Sectionformat 2641 | \def\ACM@sect@format@{#1}% 2642 | \let\Sectionformat\ACM@NR@adjustedSectionformat 2643 | %% next lines added 2018-06-17 to ensure section number is styled 2644 | \let\real@adddotafter\@adddotafter 2645 | \let\@adddotafter\ACM@adddotafter 2646 | #1{}% imposes the styles, but nullifies \MakeUppercase 2647 | \let\@adddotafter\real@adddotafter 2648 | }% 2649 | \fi \next 2650 | } 2651 | \def\ACM@NR@adjustedSectionformat#1#2{% 2652 | \realSectionformat{\ACM@sect@format{#1}}{#2}% 2653 | \let\Sectionformat\realSectionformat} 2654 | \DeclareRobustCommand{\ACM@sect@format}{\ACM@sect@format@} 2655 | \def\ACM@sect@format@null#1{#1} 2656 | \let\ACM@sect@format@\ACM@sect@format@null 2657 | \AtBeginDocument{% 2658 | \expandafter\ifx\csname LTX@adddotafter\endcsname\relax 2659 | \let\LTX@adddotafter\@adddotafter 2660 | \fi 2661 | } 2662 | \def\ACM@adddotafter#1{\ifx\relax#1\relax\else\LTX@adddotafter{#1}\fi} 2663 | \renewcommand\section{\@startsection{section}{1}{\z@}% 2664 | {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% 2665 | {.25\baselineskip}% 2666 | {\ACM@NRadjust\@secfont}} 2667 | \renewcommand\subsection{\@startsection{subsection}{2}{\z@}% 2668 | {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% 2669 | {.25\baselineskip}% 2670 | {\ACM@NRadjust\@subsecfont}} 2671 | \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% 2672 | {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% 2673 | {-3.5\p@}% 2674 | {\ACM@NRadjust{\@subsubsecfont\@adddotafter}}} 2675 | \renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}% 2676 | {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% 2677 | {-3.5\p@}% 2678 | {\ACM@NRadjust{\@parfont\@adddotafter}}} 2679 | \newcommand\noindentparagraph{\@startsection{paragraph}{4}{\z@}% 2680 | {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% 2681 | {-3.5\p@}% 2682 | {\ACM@NRadjust{\@parfont}}} 2683 | 2684 | \renewcommand\part{\@startsection{part}{9}{\z@}% 2685 | {-10\p@ \@plus -4\p@ \@minus -2\p@}% 2686 | {4\p@}% 2687 | {\ACM@NRadjust\@parfont}} 2688 | \def\section@raggedright{\@rightskip\@flushglue 2689 | \rightskip\@rightskip 2690 | \leftskip\z@skip 2691 | \parindent\z@} 2692 | \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase} 2693 | \def\@subsecfont{\sffamily\bfseries\section@raggedright} 2694 | \def\@subsubsecfont{\sffamily\itshape} 2695 | \def\@parfont{\itshape} 2696 | \setcounter{secnumdepth}{3} 2697 | \ifcase\ACM@format@nr 2698 | \relax % manuscript 2699 | \or % acmsmall 2700 | \or % acmlarge 2701 | \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase} 2702 | \def\@subsecfont{\sffamily\large\section@raggedright} 2703 | \or % acmtog 2704 | \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase} 2705 | \def\@subsecfont{\sffamily\large\section@raggedright} 2706 | \or % sigconf 2707 | \def\@secfont{\bfseries\Large\section@raggedright\MakeTextUppercase} 2708 | \def\@subsecfont{\bfseries\Large\section@raggedright} 2709 | \or % siggraph 2710 | \def\@secfont{\sffamily\bfseries\Large\section@raggedright\MakeTextUppercase} 2711 | \def\@subsecfont{\sffamily\bfseries\Large\section@raggedright} 2712 | \or % sigplan 2713 | \def\@secfont{\bfseries\Large\section@raggedright} 2714 | \def\@subsecfont{\bfseries\section@raggedright} 2715 | \def\@subsubsecfont{\bfseries\section@raggedright} 2716 | \def\@parfont{\bfseries\itshape} 2717 | \def\@subparfont{\itshape} 2718 | \or % sigchi 2719 | \setcounter{secnumdepth}{1} 2720 | \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase} 2721 | \def\@subsecfont{\sffamily\bfseries\section@raggedright} 2722 | \or % sigchi-a 2723 | \setcounter{secnumdepth}{0} 2724 | \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase} 2725 | \def\@subsecfont{\sffamily\bfseries\section@raggedright} 2726 | \fi 2727 | \def\@adddotafter#1{#1\@addpunct{.}} 2728 | \def\@addspaceafter#1{#1\@addpunct{\enspace}} 2729 | \providecommand*\@dotsep{4.5} 2730 | \def\@acmplainbodyfont{\itshape} 2731 | \def\@acmplainindent{\parindent} 2732 | \def\@acmplainheadfont{\scshape} 2733 | \def\@acmplainnotefont{\@empty} 2734 | \ifcase\ACM@format@nr 2735 | \relax % manuscript 2736 | \or % acmsmall 2737 | \or % acmlarge 2738 | \or % acmtog 2739 | \or % sigconf 2740 | \or % siggraph 2741 | \or % sigplan 2742 | \def\@acmplainbodyfont{\itshape} 2743 | \def\@acmplainindent{\z@} 2744 | \def\@acmplainheadfont{\bfseries} 2745 | \def\@acmplainnotefont{\normalfont} 2746 | \or % sigchi 2747 | \or % sigchi-a 2748 | \fi 2749 | \newtheoremstyle{acmplain}% 2750 | {.5\baselineskip\@plus.2\baselineskip 2751 | \@minus.2\baselineskip}% space above 2752 | {.5\baselineskip\@plus.2\baselineskip 2753 | \@minus.2\baselineskip}% space below 2754 | {\@acmplainbodyfont}% body font 2755 | {\@acmplainindent}% indent amount 2756 | {\@acmplainheadfont}% head font 2757 | {.}% punctuation after head 2758 | {.5em}% spacing after head 2759 | {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmplainnotefont(#3)}}}% head spec 2760 | \def\@acmdefinitionbodyfont{\normalfont} 2761 | \def\@acmdefinitionindent{\parindent} 2762 | \def\@acmdefinitionheadfont{\itshape} 2763 | \def\@acmdefinitionnotefont{\@empty} 2764 | \ifcase\ACM@format@nr 2765 | \relax % manuscript 2766 | \or % acmsmall 2767 | \or % acmlarge 2768 | \or % acmtog 2769 | \or % sigconf 2770 | \or % siggraph 2771 | \or % sigplan 2772 | \def\@acmdefinitionbodyfont{\normalfont} 2773 | \def\@acmdefinitionindent{\z@} 2774 | \def\@acmdefinitionheadfont{\bfseries} 2775 | \def\@acmdefinitionnotefont{\normalfont} 2776 | \or % sigchi 2777 | \or % sigchi-a 2778 | \fi 2779 | \newtheoremstyle{acmdefinition}% 2780 | {.5\baselineskip\@plus.2\baselineskip 2781 | \@minus.2\baselineskip}% space above 2782 | {.5\baselineskip\@plus.2\baselineskip 2783 | \@minus.2\baselineskip}% space below 2784 | {\@acmdefinitionbodyfont}% body font 2785 | {\@acmdefinitionindent}% indent amount 2786 | {\@acmdefinitionheadfont}% head font 2787 | {.}% punctuation after head 2788 | {.5em}% spacing after head 2789 | {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmdefinitionnotefont(#3)}}}% head spec 2790 | \theoremstyle{acmplain} 2791 | \AtEndPreamble{% 2792 | \if@ACM@acmthm 2793 | \theoremstyle{acmplain} 2794 | \@ifundefined{theorem}{% 2795 | \newtheorem{theorem}{Theorem}[section] 2796 | }{} 2797 | \@ifundefined{conjecture}{% 2798 | \newtheorem{conjecture}[theorem]{Conjecture} 2799 | }{} 2800 | \@ifundefined{proposition}{% 2801 | \newtheorem{proposition}[theorem]{Proposition} 2802 | }{} 2803 | \@ifundefined{lemma}{% 2804 | \newtheorem{lemma}[theorem]{Lemma} 2805 | }{} 2806 | \@ifundefined{corollary}{% 2807 | \newtheorem{corollary}[theorem]{Corollary} 2808 | }{} 2809 | \theoremstyle{acmdefinition} 2810 | \@ifundefined{example}{% 2811 | \newtheorem{example}[theorem]{Example} 2812 | }{} 2813 | \@ifundefined{definition}{% 2814 | \newtheorem{definition}[theorem]{Definition} 2815 | }{} 2816 | \fi 2817 | \theoremstyle{acmplain} 2818 | } 2819 | \def\@proofnamefont{\scshape} 2820 | \def\@proofindent{\indent} 2821 | \ifcase\ACM@format@nr 2822 | \relax % manuscript 2823 | \or % acmsmall 2824 | \or % acmlarge 2825 | \or % acmtog 2826 | \or % sigconf 2827 | \or % siggraph 2828 | \or % sigplan 2829 | \def\@proofnamefont{\itshape} 2830 | \def\@proofindent{\noindent} 2831 | \or % sigchi 2832 | \or % sigchi-a 2833 | \fi 2834 | \renewenvironment{proof}[1][\proofname]{\par 2835 | \pushQED{\qed}% 2836 | \normalfont \topsep6\p@\@plus6\p@\relax 2837 | \trivlist 2838 | \item[\@proofindent\hskip\labelsep 2839 | {\@proofnamefont #1\@addpunct{.}}]\ignorespaces 2840 | }{% 2841 | \popQED\endtrivlist\@endpefalse 2842 | } 2843 | \AtEndPreamble{% 2844 | \if@ACM@balance 2845 | \ifcase\ACM@format@nr 2846 | \relax % manuscript 2847 | \global\@ACM@balancefalse 2848 | \or % acmsmall 2849 | \global\@ACM@balancefalse 2850 | \or % acmlarge 2851 | \global\@ACM@balancefalse 2852 | \or % acmtog 2853 | \RequirePackage{balance}% 2854 | \or % sigconf 2855 | \RequirePackage{balance}% 2856 | \or % siggraph 2857 | \RequirePackage{balance}% 2858 | \or % sigplan 2859 | \RequirePackage{balance}% 2860 | \or % sigchi 2861 | \RequirePackage{balance}% 2862 | \or % sigchi-a 2863 | \global\@ACM@balancefalse 2864 | \fi 2865 | \fi 2866 | } 2867 | \AtEndDocument{% 2868 | \if@ACM@balance 2869 | \if@twocolumn 2870 | \balance 2871 | \fi\fi} 2872 | \newcommand\acksname{Acknowledgments} 2873 | \specialcomment{acks}{% 2874 | \begingroup 2875 | \section*{\acksname} 2876 | \phantomsection\addcontentsline{toc}{section}{\acksname} 2877 | }{% 2878 | \endgroup 2879 | } 2880 | \def\grantsponsor#1#2#3{#2} 2881 | \newcommand\grantnum[3][]{#3% 2882 | \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi} 2883 | \AtEndPreamble{% 2884 | \if@ACM@screen 2885 | \includecomment{screenonly} 2886 | \excludecomment{printonly} 2887 | \else 2888 | \excludecomment{screenonly} 2889 | \includecomment{printonly} 2890 | \fi 2891 | \if@ACM@anonymous 2892 | \excludecomment{anonsuppress} 2893 | \excludecomment{acks} 2894 | \else 2895 | \includecomment{anonsuppress} 2896 | \fi} 2897 | \newcommand\showeprint[2][arxiv]{% 2898 | \def\@tempa{#1}% 2899 | \ifx\@tempa\@empty\def\@tempa{arxiv}\fi 2900 | \def\@tempb{arxiv}% 2901 | \ifx\@tempa\@tempb 2902 | arXiv:\href{https://arxiv.org/abs/#2}{#2}\else arXiv:#2% 2903 | \fi} 2904 | \let\@vspace@orig=\@vspace 2905 | \let\@vspacer@orig=\@vspacer 2906 | \apptocmd{\@vspace}{\ClassWarning{\@classname}{\string\vspace\space should 2907 | only be used to provide space above/below surrounding 2908 | objects}}{}{} 2909 | \apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should 2910 | only be used to provide space above/below surrounding 2911 | objects}}{}{} 2912 | \let\@vspace@acm=\@vspace 2913 | \let\@vspacer@acm=\@vspacer 2914 | \let\ACM@origbaselinestretch\baselinestretch 2915 | \AtEndDocument{\ifx\baselinestretch\ACM@origbaselinestretch\else 2916 | \ClassError{\@classname}{An attempt to redefine 2917 | \string\baselinestretch\space detected. Please do not do this for 2918 | ACM submissions!}\fi} 2919 | \normalsize\normalfont\frenchspacing 2920 | \endinput 2921 | %% 2922 | %% End of file `acmart.cls'. 2923 | -------------------------------------------------------------------------------- /paper/article.tex: -------------------------------------------------------------------------------- 1 | % The MIT License (MIT) 2 | % 3 | % Copyright (c) 2020 Yegor Bugayenko 4 | % 5 | % Permission is hereby granted, free of charge, to any person obtaining a copy 6 | % of this software and associated documentation files (the "Software"), to deal 7 | % in the Software without restriction, including without limitation the rights 8 | % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | % copies of the Software, and to permit persons to whom the Software is 10 | % furnished to do so, subject to the following conditions: 11 | % 12 | % The above copyright notice and this permission notice shall be included 13 | % in all copies or substantial portions of the Software. 14 | % 15 | % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | % IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | % FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 18 | % AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | % LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | % SOFTWARE. 22 | 23 | \documentclass[anonymous,sigconf,10pt,nonacm=true]{acmart} 24 | \title{...} 25 | \author{Yegor Bugayenko}{}{} 26 | \email{yegor.bugayenko@huawei.com} 27 | \affiliation{% 28 | \institution{Huawei Technologies Co., Ltd.} 29 | \city{Moscow, Russia} 30 | } 31 | \ccsdesc[100]{Object-Oriented Programming} 32 | \keywords{OOP, Naming, Code Quality} 33 | 34 | \usepackage[utf8]{inputenc} 35 | \usepackage{textcomp} 36 | \usepackage[inline]{enumitem} 37 | \usepackage{amsmath} 38 | \usepackage{graphicx} 39 | \usepackage{pgfplots} 40 | \usepackage{verbatimbox} 41 | \usepackage{interval} 42 | \usepackage{hyperref} 43 | \usepackage{minted} 44 | \setminted{fontsize=\footnotesize} 45 | \setminted{breaklines} 46 | \usemintedstyle{bw} 47 | \newcommand{\code}[1]{\texttt{#1}} 48 | \newenvironment{nicetable} 49 | {\setlength{\parindent}{0em}\medskip\small} 50 | {\medskip} 51 | \begin{document} 52 | \begin{abstract} 53 | ... 54 | \end{abstract} 55 | \maketitle 56 | 57 | \section{Introduction} 58 | 59 | ... 60 | 61 | The paper is organized as follows. 62 | Section~\ref{sec:background} defines various terms used in the paper. 63 | Section~\ref{sec:related} covers related work ... 64 | Section~\ref{sec:method} covers the method of research. 65 | Section~\ref{sec:results} covers our empirical case study. 66 | Section~\ref{sec:discussion} covers limitations of both the metric and the study. 67 | Finally, we summarize our study in Section~\ref{sec:conclusion}. 68 | 69 | \section{Background} 70 | \label{sec:background} 71 | 72 | ... 73 | 74 | \section{Related Work} 75 | \label{sec:related} 76 | 77 | ... 78 | 79 | \section{Metric} 80 | \label{sec:method} 81 | 82 | ... 83 | 84 | \section{Empirical Results} 85 | \label{sec:results} 86 | 87 | \input{graph} 88 | 89 | \section{Discussion} 90 | \label{sec:discussion} 91 | 92 | ... 93 | 94 | \section{Conclusion} 95 | \label{sec:conclusion} 96 | 97 | ... 98 | 99 | \bibliographystyle{ACM-Reference-Format} 100 | \bibliography{main} 101 | 102 | \end{document} 103 | -------------------------------------------------------------------------------- /paper/graph.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[width=9cm,height=5cm, 3 | axis lines=middle, xlabel={$CC$}, ylabel={$Vars$}, 4 | xmin=1, xmax=99, 5 | ymin=0, ymax=99, 6 | extra tick style={major grid style=black},grid=major] 7 | \addplot [mark=*, only marks, mark size=0.8pt] coordinates { 8 | (1,0) 9 | (5,0) 10 | (2,0) 11 | (7,0) 12 | (3,0) 13 | (6,1) 14 | (1,1) 15 | (5,11) 16 | (13,2) 17 | (4,1) 18 | (5,2) 19 | (367,52) 20 | (18,5) 21 | (16,13) 22 | (42,19) 23 | (4,0) 24 | (52,27) 25 | (25,4) 26 | (52,18) 27 | (6,0) 28 | (13,1) 29 | (44,20) 30 | (23,10) 31 | (35,46) 32 | (10,3) 33 | (12,2) 34 | (48,12) 35 | (17,4) 36 | (14,6) 37 | (38,2) 38 | (15,3) 39 | (10,10) 40 | (14,3) 41 | (23,9) 42 | (22,8) 43 | (16,7) 44 | (9,2) 45 | (11,8) 46 | (12,0) 47 | (49,9) 48 | (39,13) 49 | (10,0) 50 | (9,1) 51 | (16,3) 52 | (8,1) 53 | (9,6) 54 | (24,6) 55 | (86,14) 56 | (14,8) 57 | (74,10) 58 | (21,6) 59 | (53,9) 60 | (20,4) 61 | (30,5) 62 | (22,0) 63 | (31,1) 64 | (1,2) 65 | (108,22) 66 | (18,3) 67 | (7,1) 68 | (24,2) 69 | (27,13) 70 | (6,2) 71 | (2,1) 72 | (2,3) 73 | (8,3) 74 | (28,5) 75 | (2,2) 76 | (3,1) 77 | (15,4) 78 | (55,26) 79 | (8,0) 80 | (87,37) 81 | (90,37) 82 | (4,6) 83 | (3,12) 84 | (3,2) 85 | (11,3) 86 | (4,4) 87 | (11,0) 88 | (34,21) 89 | (79,27) 90 | (74,23) 91 | (24,11) 92 | (42,10) 93 | (23,14) 94 | (2,4) 95 | (6,4) 96 | (49,28) 97 | (26,27) 98 | (6,5) 99 | (11,14) 100 | (17,1) 101 | (11,4) 102 | (17,5) 103 | (9,3) 104 | (9,0) 105 | (4,2) 106 | (37,5) 107 | (41,4) 108 | (14,5) 109 | (17,10) 110 | (15,0) 111 | (17,6) 112 | (104,23) 113 | (13,8) 114 | (55,7) 115 | (12,16) 116 | (26,3) 117 | (101,47) 118 | (30,16) 119 | (12,7) 120 | (46,15) 121 | (38,18) 122 | (54,15) 123 | (22,7) 124 | (27,14) 125 | (16,4) 126 | (8,2) 127 | (12,1) 128 | (7,3) 129 | (7,2) 130 | (5,8) 131 | (7,4) 132 | (9,5) 133 | (5,1) 134 | (39,25) 135 | (37,18) 136 | (70,11) 137 | (15,5) 138 | (26,10) 139 | (21,2) 140 | (26,6) 141 | (44,16) 142 | (9,4) 143 | (17,12) 144 | (6,9) 145 | (11,10) 146 | (10,8) 147 | (15,2) 148 | (16,12) 149 | (44,5) 150 | (3,3) 151 | (5,6) 152 | (40,1) 153 | (1,3) 154 | (2,8) 155 | (1,11) 156 | (11,7) 157 | (5,5) 158 | (8,22) 159 | (18,19) 160 | (7,17) 161 | (5,3) 162 | (19,7) 163 | (10,9) 164 | (10,1) 165 | (1,32) 166 | (4,16) 167 | (7,9) 168 | (1,18) 169 | (1,6) 170 | (28,20) 171 | (31,4) 172 | (13,3) 173 | (12,6) 174 | (18,1) 175 | (1,10) 176 | (6,6) 177 | (12,15) 178 | (76,70) 179 | (2,10) 180 | (46,3) 181 | (21,5) 182 | (38,14) 183 | (12,3) 184 | (1,9) 185 | (1,4) 186 | (10,7) 187 | (2,9) 188 | (1,7) 189 | (1,5) 190 | (11,1) 191 | (41,6) 192 | (8,4) 193 | (10,5) 194 | (14,22) 195 | (4,17) 196 | (2,13) 197 | (1,8) 198 | (3,4) 199 | (10,12) 200 | (1,38) 201 | (2,19) 202 | (19,0) 203 | (23,3) 204 | (13,0) 205 | (1,15) 206 | (6,28) 207 | (2,12) 208 | (6,11) 209 | (1,14) 210 | (10,2) 211 | (89,24) 212 | (16,20) 213 | (42,5) 214 | (19,4) 215 | (8,6) 216 | (7,11) 217 | (20,11) 218 | (13,5) 219 | (4,7) 220 | (12,4) 221 | (2,7) 222 | (10,6) 223 | (10,4) 224 | (39,9) 225 | (22,1) 226 | (17,2) 227 | (26,5) 228 | (3,9) 229 | (4,8) 230 | (5,4) 231 | (30,10) 232 | (30,1) 233 | (27,6) 234 | (21,0) 235 | (20,2) 236 | (87,20) 237 | (19,3) 238 | (11,2) 239 | (7,6) 240 | (8,15) 241 | (14,2) 242 | (27,8) 243 | (3,5) 244 | (22,5) 245 | (22,20) 246 | (17,0) 247 | (19,8) 248 | (4,3) 249 | (38,5) 250 | (2,18) 251 | (3,10) 252 | (18,9) 253 | (91,0) 254 | (113,9) 255 | (14,0) 256 | (34,6) 257 | (57,35) 258 | (52,4) 259 | (25,8) 260 | (155,17) 261 | (20,12) 262 | (16,6) 263 | (189,16) 264 | (15,9) 265 | (9,8) 266 | (76,20) 267 | (2,6) 268 | (62,6) 269 | (40,18) 270 | (25,9) 271 | (13,7) 272 | (6,7) 273 | (3,7) 274 | (4,20) 275 | (3,11) 276 | (11,32) 277 | (6,63) 278 | (3,6) 279 | (25,13) 280 | (6,3) 281 | (29,12) 282 | (7,10) 283 | (21,9) 284 | (7,25) 285 | (23,2) 286 | (15,1) 287 | (14,1) 288 | (4,5) 289 | (60,9) 290 | (1,21) 291 | (29,15) 292 | (119,4) 293 | (198,19) 294 | (68,2) 295 | (30,3) 296 | (61,1) 297 | (30,6) 298 | (152,8) 299 | (49,2) 300 | (24,0) 301 | (51,3) 302 | (15,7) 303 | (21,1) 304 | (118,1) 305 | (29,2) 306 | (180,1) 307 | (59,0) 308 | (21,11) 309 | (18,13) 310 | (29,6) 311 | (20,1) 312 | (6,10) 313 | (27,2) 314 | (9,13) 315 | (38,1) 316 | (17,16) 317 | (24,3) 318 | (43,15) 319 | (16,1) 320 | (26,1) 321 | (1,13) 322 | (1,19) 323 | (9,9) 324 | (19,23) 325 | (50,1) 326 | (50,25) 327 | (6,12) 328 | (34,37) 329 | (2,5) 330 | (2,36) 331 | (8,7) 332 | (14,4) 333 | (18,50) 334 | (24,5) 335 | (29,1) 336 | (20,0) 337 | (30,2) 338 | (63,8) 339 | (46,6) 340 | (22,16) 341 | (20,6) 342 | (15,23) 343 | (35,3) 344 | (6,61) 345 | (15,65) 346 | (1,12) 347 | (16,5) 348 | (3,16) 349 | (2,11) 350 | (11,11) 351 | (42,11) 352 | (1,17) 353 | (5,17) 354 | (29,140) 355 | (3,18) 356 | (10,19) 357 | (5,9) 358 | (15,17) 359 | (22,9) 360 | (22,10) 361 | (31,24) 362 | (14,9) 363 | (21,33) 364 | (7,5) 365 | (24,10) 366 | (6,8) 367 | (12,11) 368 | (23,7) 369 | (27,9) 370 | (3,14) 371 | (95,64) 372 | (66,13) 373 | (50,2) 374 | (37,1) 375 | (18,0) 376 | (7,7) 377 | (109,55) 378 | (30,14) 379 | (15,13) 380 | (27,4) 381 | (18,6) 382 | (12,8) 383 | (33,21) 384 | (12,19) 385 | (17,18) 386 | (31,0) 387 | (96,13) 388 | (34,55) 389 | (30,24) 390 | (153,18) 391 | (22,2) 392 | (16,11) 393 | (7,16) 394 | (11,38) 395 | (7,15) 396 | (11,5) 397 | (38,26) 398 | (25,11) 399 | (16,0) 400 | (4,23) 401 | (3,8) 402 | (7,20) 403 | (13,9) 404 | (12,5) 405 | (3,25) 406 | (19,67) 407 | (27,47) 408 | (1,20) 409 | (4,15) 410 | (3,24) 411 | (57,13) 412 | (8,9) 413 | (45,4) 414 | (57,16) 415 | (23,15) 416 | (14,11) 417 | (14,62) 418 | (17,14) 419 | (1,16) 420 | (32,10) 421 | (17,3) 422 | (21,21) 423 | (43,27) 424 | (119,214) 425 | (22,15) 426 | (27,15) 427 | (43,42) 428 | (23,13) 429 | (16,2) 430 | (9,48) 431 | (2,25) 432 | (21,12) 433 | (17,9) 434 | (41,14) 435 | (45,0) 436 | (38,3) 437 | (19,1) 438 | (22,12) 439 | (46,4) 440 | (5,18) 441 | (46,12) 442 | (11,13) 443 | (24,51) 444 | (5,14) 445 | (60,28) 446 | (33,22) 447 | (23,6) 448 | (9,7) 449 | (74,45) 450 | (25,0) 451 | (39,4) 452 | (50,18) 453 | (21,16) 454 | (4,34) 455 | (5,34) 456 | (15,6) 457 | (2,30) 458 | (14,30) 459 | (1,51) 460 | (6,14) 461 | (26,14) 462 | (66,86) 463 | (4,12) 464 | (1,42) 465 | (42,16) 466 | (1,22) 467 | (11,6) 468 | (24,23) 469 | (46,13) 470 | (13,12) 471 | (88,15) 472 | (48,2) 473 | (28,17) 474 | (22,3) 475 | (41,18) 476 | (17,7) 477 | (13,4) 478 | (59,29) 479 | (52,22) 480 | (27,3) 481 | (19,10) 482 | (35,7) 483 | (72,11) 484 | (31,15) 485 | (25,2) 486 | (35,4) 487 | (37,7) 488 | (23,12) 489 | (26,4) 490 | (8,5) 491 | (16,9) 492 | (31,7) 493 | (1,49) 494 | (4,31) 495 | (4,19) 496 | (1,59) 497 | (8,23) 498 | (31,2) 499 | (39,7) 500 | (42,7) 501 | (35,6) 502 | (18,8) 503 | (44,0) 504 | (85,10) 505 | (29,4) 506 | (30,4) 507 | (19,2) 508 | (25,5) 509 | (36,3) 510 | (18,2) 511 | (24,4) 512 | (23,1) 513 | (24,8) 514 | (40,4) 515 | (28,3) 516 | (17,8) 517 | (27,0) 518 | (40,3) 519 | (29,3) 520 | (25,14) 521 | (38,7) 522 | (57,26) 523 | (115,79) 524 | (43,14) 525 | (40,14) 526 | (45,20) 527 | (48,28) 528 | (106,19) 529 | (36,15) 530 | (23,0) 531 | (28,0) 532 | (26,0) 533 | (43,16) 534 | (21,13) 535 | (5,13) 536 | (2,14) 537 | (37,24) 538 | (4,10) 539 | (42,9) 540 | (47,1) 541 | (18,4) 542 | (34,5) 543 | (61,14) 544 | (47,5) 545 | (2,302) 546 | (8,25) 547 | (27,1) 548 | (51,5) 549 | (55,5) 550 | (34,1) 551 | (137,21) 552 | (86,5) 553 | (32,8) 554 | (68,3) 555 | (52,3) 556 | (39,26) 557 | (16,19) 558 | (18,12) 559 | (13,6) 560 | (54,21) 561 | (87,16) 562 | (27,19) 563 | (23,18) 564 | (81,16) 565 | (75,27) 566 | (23,5) 567 | (95,27) 568 | (220,27) 569 | (7,8) 570 | (20,3) 571 | (33,16) 572 | (29,16) 573 | (3,20) 574 | (5,30) 575 | (2,16) 576 | (1,72) 577 | (1,33) 578 | (5,7) 579 | (19,6) 580 | (45,7) 581 | (41,5) 582 | (47,6) 583 | (31,8) 584 | (28,14) 585 | (37,14) 586 | (14,7) 587 | (33,9) 588 | (18,10) 589 | (20,8) 590 | (32,6) 591 | (24,1) 592 | (20,7) 593 | (117,26) 594 | (35,10) 595 | (63,14) 596 | (3,19) 597 | (51,10) 598 | (61,22) 599 | (51,11) 600 | (58,7) 601 | (65,12) 602 | (55,12) 603 | (48,18) 604 | (71,18) 605 | (93,31) 606 | (41,0) 607 | (38,9) 608 | (34,7) 609 | (3,22) 610 | (1,25) 611 | (1,30) 612 | (3,36) 613 | (12,23) 614 | (7,18) 615 | (5,49) 616 | (21,7) 617 | (26,12) 618 | (25,6) 619 | (40,23) 620 | (27,7) 621 | (42,12) 622 | (14,24) 623 | (12,14) 624 | (16,8) 625 | (23,28) 626 | (10,26) 627 | (4,22) 628 | (5,44) 629 | (1,39) 630 | (2,15) 631 | (35,13) 632 | (24,7) 633 | (60,23) 634 | (36,9) 635 | (22,6) 636 | (35,8) 637 | (22,4) 638 | (55,8) 639 | (56,3) 640 | (28,6) 641 | (32,5) 642 | (21,20) 643 | (48,11) 644 | (58,13) 645 | (28,2) 646 | (21,8) 647 | (58,10) 648 | (44,9) 649 | (59,12) 650 | (68,31) 651 | (76,10) 652 | (28,7) 653 | (44,6) 654 | (33,3) 655 | (43,0) 656 | (67,20) 657 | (41,2) 658 | (93,5) 659 | (2,32) 660 | (28,52) 661 | (4,37) 662 | (72,29) 663 | (76,61) 664 | (183,2) 665 | (41,29) 666 | (115,7) 667 | (158,27) 668 | (125,23) 669 | (57,28) 670 | (50,19) 671 | (42,13) 672 | (52,38) 673 | (61,20) 674 | (42,18) 675 | (12,13) 676 | (4,18) 677 | (5,12) 678 | (1,74) 679 | (1,28) 680 | (33,8) 681 | (36,8) 682 | (90,15) 683 | (7,12) 684 | (62,17) 685 | (83,13) 686 | (16,15) 687 | (11,20) 688 | (10,22) 689 | (45,13) 690 | (30,19) 691 | (55,9) 692 | (39,1) 693 | (108,26) 694 | (60,19) 695 | (28,15) 696 | (58,17) 697 | (33,0) 698 | (29,9) 699 | (49,10) 700 | (75,8) 701 | (1,23) 702 | (1,40) 703 | (16,27) 704 | (5,53) 705 | (27,10) 706 | (1,36) 707 | (3,53) 708 | (2,21) 709 | (3,31) 710 | (1,27) 711 | (5,10) 712 | (9,32) 713 | (33,14) 714 | (20,9) 715 | (45,12) 716 | (84,15) 717 | (156,38) 718 | (63,7) 719 | (32,7) 720 | (64,7) 721 | (84,19) 722 | (36,7) 723 | (55,3) 724 | (35,0) 725 | (12,32) 726 | (53,71) 727 | (34,8) 728 | (37,12) 729 | (57,20) 730 | (20,10) 731 | (64,11) 732 | (53,10) 733 | (19,5) 734 | (47,10) 735 | (48,1) 736 | (27,12) 737 | (36,4) 738 | (36,11) 739 | (51,2) 740 | (83,6) 741 | (28,8) 742 | (3,42) 743 | (19,11) 744 | (20,19) 745 | (66,73) 746 | (7,19) 747 | (18,11) 748 | (37,8) 749 | (51,7) 750 | (21,3) 751 | (48,7) 752 | (48,4) 753 | (61,3) 754 | (1,91) 755 | (1,34) 756 | (1,29) 757 | (12,31) 758 | (4,108) 759 | (18,7) 760 | (34,10) 761 | (25,20) 762 | (38,27) 763 | (69,15) 764 | (41,32) 765 | (4,9) 766 | (21,4) 767 | (2,31) 768 | (5,16) 769 | (2,37) 770 | (25,7) 771 | (3,13) 772 | (5,42) 773 | (9,19) 774 | (3,21) 775 | (2,20) 776 | (5,132) 777 | (2,34) 778 | (2,29) 779 | (5,48) 780 | (8,28) 781 | (20,27) 782 | (5,23) 783 | (35,5) 784 | (32,0) 785 | (86,18) 786 | (46,7) 787 | (45,19) 788 | (31,16) 789 | (47,18) 790 | (55,16) 791 | (60,10) 792 | (38,21) 793 | (48,10) 794 | (49,13) 795 | (38,32) 796 | (73,21) 797 | (19,20) 798 | (44,12) 799 | (62,16) 800 | (47,11) 801 | (25,10) 802 | (64,15) 803 | (28,4) 804 | (34,4) 805 | (50,9) 806 | (94,22) 807 | (31,9) 808 | (50,6) 809 | (6,75) 810 | (2,45) 811 | (1,45) 812 | (5,22) 813 | (10,40) 814 | (1,50) 815 | (1,24) 816 | (1,97) 817 | (4,41) 818 | (1,73) 819 | (40,5) 820 | (47,3) 821 | (41,8) 822 | (34,14) 823 | (64,23) 824 | (36,20) 825 | (54,65) 826 | (40,43) 827 | (58,20) 828 | (69,22) 829 | (23,21) 830 | (23,8) 831 | (19,9) 832 | (33,10) 833 | (43,4) 834 | (58,11) 835 | (10,11) 836 | (39,15) 837 | (52,15) 838 | (17,11) 839 | (19,15) 840 | (55,34) 841 | (7,23) 842 | (42,73) 843 | (128,58) 844 | (47,13) 845 | (94,28) 846 | (26,2) 847 | (137,33) 848 | (30,12) 849 | (49,5) 850 | (53,32) 851 | (39,16) 852 | (94,25) 853 | (59,14) 854 | (13,10) 855 | (29,10) 856 | (50,22) 857 | (162,77) 858 | (69,10) 859 | (60,18) 860 | (49,18) 861 | (11,70) 862 | (14,40) 863 | (6,67) 864 | (8,14) 865 | (9,23) 866 | (3,29) 867 | (1,35) 868 | (16,17) 869 | (4,26) 870 | (4,11) 871 | (17,13) 872 | (1,57) 873 | (51,23) 874 | (324,58) 875 | (84,22) 876 | (53,1) 877 | (28,29) 878 | (130,25) 879 | (115,53) 880 | (319,76) 881 | (26,8) 882 | (79,10) 883 | (102,18) 884 | (32,3) 885 | (121,22) 886 | (76,9) 887 | (90,22) 888 | (11,9) 889 | (33,13) 890 | (94,11) 891 | (175,44) 892 | (59,3) 893 | (29,5) 894 | (51,4) 895 | (128,16) 896 | (147,26) 897 | (151,33) 898 | (75,24) 899 | (123,32) 900 | (58,9) 901 | (45,16) 902 | (50,7) 903 | (29,7) 904 | (24,17) 905 | (102,9) 906 | (89,7) 907 | (10,17) 908 | (34,2) 909 | (40,10) 910 | (31,5) 911 | (36,19) 912 | (41,45) 913 | (6,13) 914 | (4,62) 915 | (3,26) 916 | (87,26) 917 | (31,3) 918 | (16,10) 919 | (29,8) 920 | (50,4) 921 | (60,3) 922 | (90,5) 923 | (36,0) 924 | (31,17) 925 | (23,4) 926 | (38,10) 927 | (51,12) 928 | (33,4) 929 | (3,49) 930 | (40,11) 931 | (39,6) 932 | (63,6) 933 | (3,15) 934 | (4,25) 935 | (4,13) 936 | (2,17) 937 | (43,9) 938 | (31,14) 939 | (12,18) 940 | (13,20) 941 | (80,16) 942 | (25,3) 943 | (135,5) 944 | (56,9) 945 | (47,12) 946 | (33,7) 947 | (21,10) 948 | (31,11) 949 | (55,0) 950 | (27,18) 951 | (56,31) 952 | (28,43) 953 | (18,16) 954 | (12,17) 955 | (7,14) 956 | (6,23) 957 | (1,26) 958 | (61,45) 959 | (15,20) 960 | (13,54) 961 | (9,53) 962 | (33,5) 963 | (40,2) 964 | (48,14) 965 | (77,0) 966 | (43,8) 967 | (41,3) 968 | (65,5) 969 | (86,7) 970 | (96,7) 971 | (60,16) 972 | (42,4) 973 | (63,13) 974 | (32,2) 975 | (33,18) 976 | (27,17) 977 | (9,37) 978 | (23,11) 979 | (50,10) 980 | (92,25) 981 | (61,15) 982 | (7,22) 983 | (13,13) 984 | (12,10) 985 | (26,17) 986 | (10,25) 987 | (4,14) 988 | (51,16) 989 | (12,28) 990 | (23,23) 991 | (16,57) 992 | (138,75) 993 | (33,6) 994 | (20,18) 995 | (52,0) 996 | (7,13) 997 | (11,23) 998 | (15,10) 999 | (14,13) 1000 | (37,49) 1001 | (35,15) 1002 | (44,2) 1003 | (30,7) 1004 | (21,25) 1005 | (75,55) 1006 | (25,19) 1007 | (15,16) 1008 | (6,17) 1009 | (44,1) 1010 | (51,17) 1011 | (19,37) 1012 | (17,60) 1013 | (49,79) 1014 | (5,27) 1015 | (24,45) 1016 | (5,33) 1017 | (5,29) 1018 | (5,63) 1019 | (41,47) 1020 | (23,31) 1021 | (17,30) 1022 | (19,69) 1023 | (31,32) 1024 | (7,60) 1025 | (22,82) 1026 | (35,23) 1027 | (9,21) 1028 | (27,101) 1029 | (35,87) 1030 | (14,45) 1031 | (142,68) 1032 | (19,83) 1033 | (8,18) 1034 | (46,54) 1035 | (37,44) 1036 | (22,112) 1037 | (34,3) 1038 | (8,10) 1039 | (3,81) 1040 | (69,23) 1041 | (6,33) 1042 | (18,46) 1043 | (25,67) 1044 | (10,16) 1045 | (4,38) 1046 | (2,22) 1047 | (6,48) 1048 | (9,39) 1049 | (8,11) 1050 | (28,97) 1051 | (32,32) 1052 | (47,33) 1053 | (10,39) 1054 | (62,85) 1055 | (53,22) 1056 | (55,56) 1057 | (32,43) 1058 | (47,54) 1059 | (24,32) 1060 | (67,106) 1061 | (51,58) 1062 | (18,27) 1063 | (38,53) 1064 | (33,49) 1065 | (70,26) 1066 | (22,18) 1067 | (11,26) 1068 | (36,45) 1069 | (9,33) 1070 | (16,24) 1071 | (11,12) 1072 | (11,25) 1073 | (281,176) 1074 | (19,42) 1075 | (59,8) 1076 | (10,30) 1077 | (76,55) 1078 | (107,117) 1079 | (9,14) 1080 | (82,19) 1081 | (80,8) 1082 | (216,68) 1083 | (143,57) 1084 | (139,66) 1085 | (83,21) 1086 | (115,156) 1087 | (45,1) 1088 | (32,42) 1089 | (6,100) 1090 | (41,10) 1091 | (43,10) 1092 | (13,17) 1093 | (7,21) 1094 | (67,65) 1095 | (13,23) 1096 | (32,125) 1097 | (15,34) 1098 | (27,20) 1099 | (24,21) 1100 | (56,8) 1101 | (48,13) 1102 | (54,10) 1103 | (28,16) 1104 | (14,12) 1105 | (31,34) 1106 | (67,15) 1107 | (125,21) 1108 | (8,12) 1109 | (25,17) 1110 | (36,24) 1111 | (26,7) 1112 | (62,2) 1113 | (28,9) 1114 | (70,33) 1115 | (7,105) 1116 | (10,21) 1117 | (15,11) 1118 | (13,34) 1119 | (2,27) 1120 | (17,26) 1121 | (17,31) 1122 | (27,32) 1123 | (24,24) 1124 | (44,13) 1125 | (6,20) 1126 | (23,86) 1127 | (7,43) 1128 | (9,28) 1129 | (11,41) 1130 | (131,46) 1131 | (20,16) 1132 | (79,70) 1133 | (17,35) 1134 | (78,5) 1135 | (86,30) 1136 | (66,1) 1137 | (38,15) 1138 | (76,3) 1139 | (54,18) 1140 | (76,50) 1141 | (84,49) 1142 | (50,16) 1143 | (125,51) 1144 | (44,35) 1145 | (122,68) 1146 | (63,11) 1147 | (18,31) 1148 | (33,52) 1149 | (6,16) 1150 | (64,37) 1151 | (39,33) 1152 | (48,32) 1153 | (134,38) 1154 | (49,27) 1155 | (9,10) 1156 | (33,19) 1157 | (43,35) 1158 | (62,98) 1159 | (15,18) 1160 | (55,73) 1161 | (77,50) 1162 | (19,28) 1163 | (21,22) 1164 | (12,27) 1165 | (60,13) 1166 | (47,24) 1167 | (98,32) 1168 | (75,18) 1169 | (158,32) 1170 | (40,7) 1171 | (22,14) 1172 | (3,17) 1173 | (62,7) 1174 | (48,3) 1175 | (28,1) 1176 | (34,0) 1177 | (43,3) 1178 | (25,1) 1179 | (7,27) 1180 | (36,67) 1181 | (25,33) 1182 | (38,0) 1183 | (60,24) 1184 | (71,10) 1185 | (69,39) 1186 | (20,5) 1187 | (91,28) 1188 | (74,11) 1189 | (53,3) 1190 | (30,8) 1191 | (101,17) 1192 | (66,57) 1193 | (60,17) 1194 | (42,3) 1195 | (29,94) 1196 | (35,21) 1197 | (8,17) 1198 | (39,18) 1199 | (75,19) 1200 | (76,40) 1201 | (39,0) 1202 | (76,36) 1203 | (301,109) 1204 | (73,1) 1205 | (133,4) 1206 | (8,8) 1207 | (68,5) 1208 | (36,6) 1209 | (52,1) 1210 | (46,14) 1211 | (7,30) 1212 | (135,36) 1213 | (102,5) 1214 | (122,55) 1215 | (373,192) 1216 | (119,28) 1217 | (187,46) 1218 | (97,1) 1219 | (10,29) 1220 | (8,29) 1221 | (13,25) 1222 | (13,56) 1223 | (5,20) 1224 | (94,129) 1225 | (2,52) 1226 | (4,45) 1227 | (4,78) 1228 | (50,142) 1229 | (13,44) 1230 | (9,11) 1231 | (18,76) 1232 | (20,17) 1233 | (23,19) 1234 | (44,42) 1235 | (30,56) 1236 | (32,29) 1237 | (16,22) 1238 | (12,59) 1239 | (56,60) 1240 | (57,156) 1241 | (14,16) 1242 | (3,74) 1243 | (47,20) 1244 | (52,6) 1245 | (12,21) 1246 | (64,0) 1247 | (107,296) 1248 | (53,194) 1249 | (153,111) 1250 | (71,7) 1251 | (71,34) 1252 | (75,148) 1253 | (4,39) 1254 | (211,113) 1255 | (127,114) 1256 | (143,106) 1257 | (5,21) 1258 | (25,29) 1259 | (78,75) 1260 | (40,0) 1261 | (31,13) 1262 | (172,46) 1263 | (93,42) 1264 | (14,10) 1265 | (19,54) 1266 | (59,43) 1267 | (9,17) 1268 | (39,8) 1269 | (51,0) 1270 | (65,3) 1271 | (70,0) 1272 | (635,101) 1273 | (788,98) 1274 | (21,18) 1275 | (13,21) 1276 | (37,36) 1277 | (15,8) 1278 | (110,10) 1279 | (65,7) 1280 | (131,1) 1281 | (29,0) 1282 | (105,0) 1283 | (409,25) 1284 | (68,4) 1285 | (93,12) 1286 | (61,13) 1287 | (79,11) 1288 | (63,23) 1289 | (66,16) 1290 | (48,0) 1291 | (50,13) 1292 | (37,10) 1293 | (146,54) 1294 | (75,7) 1295 | (194,79) 1296 | (21,14) 1297 | (259,0) 1298 | (257,75) 1299 | (76,25) 1300 | (83,14) 1301 | (57,7) 1302 | (69,5) 1303 | (92,13) 1304 | (117,46) 1305 | (146,63) 1306 | (66,3) 1307 | (139,59) 1308 | (23,29) 1309 | (200,83) 1310 | (56,21) 1311 | (63,53) 1312 | (38,8) 1313 | (39,17) 1314 | (62,74) 1315 | (31,6) 1316 | (51,22) 1317 | (28,33) 1318 | (18,77) 1319 | (14,48) 1320 | (45,6) 1321 | (81,5) 1322 | (62,9) 1323 | (88,9) 1324 | (52,2) 1325 | (31,21) 1326 | (104,33) 1327 | (579,45) 1328 | (132,15) 1329 | (128,24) 1330 | (106,24) 1331 | (78,9) 1332 | (47,4) 1333 | (92,7) 1334 | (25,12) 1335 | (43,20) 1336 | (15,12) 1337 | (51,13) 1338 | (75,6) 1339 | (37,6) 1340 | (41,23) 1341 | (249,7) 1342 | (102,32) 1343 | (36,14) 1344 | (71,11) 1345 | (70,13) 1346 | (73,36) 1347 | (88,26) 1348 | (30,0) 1349 | (94,0) 1350 | (61,0) 1351 | (115,0) 1352 | (78,0) 1353 | (37,0) 1354 | (35,2) 1355 | (107,0) 1356 | (6,29) 1357 | (56,22) 1358 | (13,11) 1359 | (43,7) 1360 | (49,4) 1361 | (31,10) 1362 | (60,7) 1363 | (33,15) 1364 | (29,13) 1365 | (22,11) 1366 | (75,15) 1367 | (19,12) 1368 | (82,1) 1369 | (74,6) 1370 | (40,13) 1371 | (47,16) 1372 | (102,0) 1373 | (49,34) 1374 | (45,2) 1375 | (56,18) 1376 | (127,19) 1377 | (46,0) 1378 | (54,2) 1379 | (44,24) 1380 | (30,20) 1381 | (24,15) 1382 | (16,40) 1383 | (13,16) 1384 | (110,103) 1385 | (91,7) 1386 | (34,9) 1387 | (60,0) 1388 | (30,17) 1389 | (208,62) 1390 | (78,31) 1391 | (51,14) 1392 | (77,25) 1393 | (378,102) 1394 | (93,35) 1395 | (63,50) 1396 | (67,8) 1397 | (55,14) 1398 | (38,16) 1399 | (35,28) 1400 | (52,5) 1401 | (58,16) 1402 | (52,44) 1403 | (42,0) 1404 | (43,1) 1405 | (134,15) 1406 | (24,14) 1407 | (45,25) 1408 | (124,33) 1409 | (56,2) 1410 | (105,4) 1411 | (203,0) 1412 | (65,10) 1413 | (20,13) 1414 | (30,23) 1415 | (71,25) 1416 | (25,15) 1417 | (77,24) 1418 | (67,44) 1419 | (32,41) 1420 | (59,4) 1421 | (191,26) 1422 | (22,13) 1423 | (30,30) 1424 | (15,19) 1425 | (30,15) 1426 | (20,57) 1427 | (53,12) 1428 | (86,23) 1429 | (214,42) 1430 | (37,2) 1431 | (35,14) 1432 | (127,9) 1433 | (63,17) 1434 | (32,33) 1435 | (82,11) 1436 | (77,9) 1437 | (74,21) 1438 | (91,11) 1439 | (52,8) 1440 | (246,12) 1441 | (136,27) 1442 | (64,14) 1443 | (29,23) 1444 | (74,252) 1445 | (260,349) 1446 | (44,32) 1447 | (1,64) 1448 | (4,27) 1449 | (6,15) 1450 | (3,173) 1451 | (14,66) 1452 | (32,4) 1453 | (11,18) 1454 | (3,45) 1455 | (9,15) 1456 | (2,54) 1457 | (18,66) 1458 | (8,13) 1459 | (9,29) 1460 | (25,21) 1461 | (86,37) 1462 | (1,37) 1463 | (9,16) 1464 | (12,22) 1465 | (1,65) 1466 | (19,22) 1467 | (9,26) 1468 | (11,31) 1469 | (35,73) 1470 | (41,21) 1471 | (1,48) 1472 | (13,62) 1473 | (9,95) 1474 | (26,41) 1475 | (9,18) 1476 | (8,65) 1477 | (29,108) 1478 | (4,53) 1479 | (15,153) 1480 | (18,35) 1481 | (20,28) 1482 | (7,65) 1483 | (6,30) 1484 | (4,36) 1485 | (8,19) 1486 | (6,19) 1487 | (4,67) 1488 | (8,80) 1489 | (28,143) 1490 | (17,15) 1491 | (12,61) 1492 | (7,40) 1493 | (29,26) 1494 | (13,112) 1495 | (13,31) 1496 | (10,183) 1497 | (16,39) 1498 | (3,44) 1499 | (13,63) 1500 | (20,84) 1501 | (11,148) 1502 | (4,29) 1503 | (4,68) 1504 | (4,56) 1505 | (6,21) 1506 | (14,138) 1507 | (2,48) 1508 | (24,36) 1509 | (44,146) 1510 | (8,71) 1511 | (1,107) 1512 | (9,90) 1513 | (7,51) 1514 | (2,88) 1515 | (13,35) 1516 | (10,27) 1517 | (18,34) 1518 | (55,10) 1519 | (5,24) 1520 | (7,52) 1521 | (7,31) 1522 | (30,44) 1523 | (4,84) 1524 | (55,38) 1525 | (20,14) 1526 | (2,38) 1527 | (51,32) 1528 | (71,40) 1529 | (40,20) 1530 | (39,19) 1531 | (94,47) 1532 | (14,14) 1533 | (32,17) 1534 | (18,21) 1535 | (70,21) 1536 | (69,6) 1537 | (37,21) 1538 | (76,18) 1539 | (37,17) 1540 | (98,24) 1541 | (43,11) 1542 | (34,17) 1543 | (60,21) 1544 | (42,20) 1545 | (26,15) 1546 | (96,2) 1547 | (32,39) 1548 | (75,39) 1549 | (11,17) 1550 | (107,59) 1551 | (63,32) 1552 | (46,27) 1553 | (34,12) 1554 | (53,28) 1555 | (93,34) 1556 | (129,41) 1557 | (69,11) 1558 | (46,9) 1559 | (39,28) 1560 | (74,18) 1561 | (141,49) 1562 | (31,29) 1563 | (65,27) 1564 | (111,79) 1565 | (33,11) 1566 | (79,53) 1567 | (52,40) 1568 | (16,14) 1569 | (26,11) 1570 | (31,27) 1571 | (45,34) 1572 | (29,11) 1573 | (29,18) 1574 | (63,16) 1575 | (25,25) 1576 | (41,27) 1577 | (15,14) 1578 | (46,37) 1579 | (51,37) 1580 | (38,24) 1581 | (60,45) 1582 | (68,18) 1583 | (93,25) 1584 | (32,14) 1585 | (40,22) 1586 | (19,14) 1587 | (140,63) 1588 | (32,16) 1589 | (44,10) 1590 | (80,20) 1591 | (60,26) 1592 | (38,19) 1593 | (28,19) 1594 | (117,28) 1595 | (26,22) 1596 | (36,1) 1597 | (18,25) 1598 | (27,26) 1599 | (13,18) 1600 | (42,41) 1601 | (10,15) 1602 | (113,35) 1603 | (99,21) 1604 | (73,17) 1605 | (47,8) 1606 | (36,10) 1607 | (79,20) 1608 | (43,23) 1609 | (61,18) 1610 | (10,13) 1611 | (43,5) 1612 | (30,13) 1613 | (39,20) 1614 | (18,14) 1615 | (46,2) 1616 | (60,31) 1617 | (41,1) 1618 | (36,23) 1619 | (46,18) 1620 | (52,21) 1621 | (47,38) 1622 | (76,28) 1623 | (56,40) 1624 | (20,21) 1625 | (14,25) 1626 | (45,60) 1627 | (12,24) 1628 | (63,22) 1629 | (134,112) 1630 | (38,12) 1631 | (150,72) 1632 | (38,6) 1633 | (17,17) 1634 | (31,28) 1635 | (71,38) 1636 | (67,24) 1637 | (53,44) 1638 | (163,99) 1639 | (102,36) 1640 | (80,55) 1641 | (66,5) 1642 | (37,9) 1643 | (52,28) 1644 | (62,25) 1645 | (181,113) 1646 | (85,5) 1647 | (135,30) 1648 | (24,43) 1649 | (32,20) 1650 | (30,18) 1651 | (27,16) 1652 | (63,41) 1653 | (22,22) 1654 | (12,38) 1655 | (26,23) 1656 | (22,17) 1657 | (76,66) 1658 | (8,26) 1659 | (24,37) 1660 | (9,12) 1661 | (54,20) 1662 | (7,28) 1663 | (46,30) 1664 | (100,21) 1665 | (154,3) 1666 | (255,14) 1667 | (73,4) 1668 | (77,10) 1669 | (63,4) 1670 | (131,5) 1671 | (78,6) 1672 | (130,41) 1673 | (66,40) 1674 | (35,19) 1675 | (13,14) 1676 | (36,2) 1677 | (85,14) 1678 | (47,7) 1679 | (89,8) 1680 | (71,19) 1681 | (5,15) 1682 | (6,24) 1683 | (31,18) 1684 | (23,17) 1685 | (24,18) 1686 | (17,19) 1687 | (190,23) 1688 | (83,4) 1689 | (39,14) 1690 | (93,22) 1691 | (86,27) 1692 | (139,10) 1693 | (117,17) 1694 | (123,1) 1695 | (42,8) 1696 | (72,19) 1697 | (111,41) 1698 | (381,173) 1699 | (39,5) 1700 | (16,25) 1701 | (82,3) 1702 | (50,0) 1703 | (834,0) 1704 | (117,0) 1705 | (74,0) 1706 | (44,33) 1707 | (74,26) 1708 | (64,27) 1709 | (46,16) 1710 | (151,65) 1711 | (283,40) 1712 | (212,3) 1713 | (55,15) 1714 | (24,13) 1715 | (166,17) 1716 | (86,13) 1717 | (123,4) 1718 | (55,24) 1719 | (35,30) 1720 | (49,20) 1721 | (29,20) 1722 | (38,4) 1723 | (55,1) 1724 | (53,2) 1725 | (12,20) 1726 | (42,31) 1727 | (116,121) 1728 | (35,12) 1729 | (61,39) 1730 | (95,7) 1731 | (460,2) 1732 | (458,0) 1733 | (97,0) 1734 | (146,0) 1735 | (55,4) 1736 | (49,19) 1737 | (39,3) 1738 | (83,11) 1739 | (67,6) 1740 | (32,1) 1741 | (35,11) 1742 | (57,18) 1743 | (63,20) 1744 | (68,20) 1745 | (26,19) 1746 | (59,32) 1747 | (47,2) 1748 | (86,33) 1749 | (32,11) 1750 | (149,15) 1751 | (14,23) 1752 | (7,24) 1753 | (13,28) 1754 | (6,39) 1755 | (28,11) 1756 | (10,23) 1757 | (17,24) 1758 | (45,32) 1759 | (120,40) 1760 | (62,14) 1761 | (4,30) 1762 | (60,5) 1763 | (52,11) 1764 | (111,47) 1765 | (46,36) 1766 | (47,25) 1767 | (55,11) 1768 | (70,44) 1769 | (59,11) 1770 | (56,16) 1771 | (318,32) 1772 | (62,23) 1773 | (51,18) 1774 | (111,17) 1775 | (107,10) 1776 | (39,2) 1777 | (105,14) 1778 | (37,13) 1779 | (54,16) 1780 | (44,17) 1781 | (155,4) 1782 | (146,2) 1783 | (136,2) 1784 | (57,12) 1785 | (198,47) 1786 | (157,59) 1787 | (19,21) 1788 | (5,28) 1789 | (7,247) 1790 | (2,40) 1791 | (18,32) 1792 | (66,259) 1793 | (9,36) 1794 | (2,67) 1795 | (67,21) 1796 | (35,17) 1797 | (49,15) 1798 | (56,5) 1799 | (82,22) 1800 | (122,49) 1801 | (34,20) 1802 | (24,9) 1803 | (1,31) 1804 | (95,22) 1805 | (8,27) 1806 | (14,34) 1807 | (57,8) 1808 | (14,26) 1809 | (9,45) 1810 | (59,15) 1811 | (38,28) 1812 | (66,17) 1813 | (5,35) 1814 | (62,8) 1815 | (107,3) 1816 | (69,26) 1817 | (45,5) 1818 | (41,16) 1819 | (122,26) 1820 | (35,9) 1821 | (22,50) 1822 | (8,35) 1823 | (7,26) 1824 | (4,48) 1825 | (5,212) 1826 | (28,31) 1827 | (5,43) 1828 | (9,116) 1829 | (14,27) 1830 | (28,10) 1831 | (26,18) 1832 | (58,14) 1833 | (32,15) 1834 | (218,55) 1835 | (34,15) 1836 | (26,20) 1837 | (3,54) 1838 | (10,54) 1839 | (24,61) 1840 | (42,29) 1841 | (54,33) 1842 | (36,26) 1843 | (37,4) 1844 | (32,13) 1845 | (53,13) 1846 | (47,15) 1847 | (36,16) 1848 | (121,79) 1849 | (45,9) 1850 | (55,25) 1851 | (54,53) 1852 | (48,23) 1853 | (55,23) 1854 | (37,22) 1855 | (7,45) 1856 | (12,60) 1857 | (29,14) 1858 | (10,14) 1859 | (12,9) 1860 | (14,19) 1861 | (46,19) 1862 | (32,9) 1863 | (29,24) 1864 | (73,10) 1865 | (28,46) 1866 | (42,2) 1867 | (68,6) 1868 | (56,14) 1869 | (19,64) 1870 | (5,26) 1871 | (11,27) 1872 | (27,5) 1873 | (101,6) 1874 | (29,35) 1875 | (21,24) 1876 | (27,11) 1877 | (8,16) 1878 | (90,142) 1879 | (33,96) 1880 | (6,34) 1881 | (77,49) 1882 | (37,45) 1883 | (14,49) 1884 | (8,32) 1885 | (3,27) 1886 | (22,32) 1887 | (37,42) 1888 | (17,59) 1889 | (10,126) 1890 | (27,57) 1891 | (60,65) 1892 | (15,49) 1893 | (15,50) 1894 | (15,21) 1895 | (32,27) 1896 | (18,29) 1897 | (25,51) 1898 | (22,58) 1899 | (66,30) 1900 | (4,32) 1901 | (17,20) 1902 | (3,84) 1903 | (4,54) 1904 | (23,27) 1905 | (24,53) 1906 | (6,31) 1907 | (12,36) 1908 | (24,120) 1909 | (29,58) 1910 | (13,37) 1911 | (8,24) 1912 | (38,17) 1913 | (45,58) 1914 | (7,49) 1915 | (30,26) 1916 | (50,29) 1917 | (19,80) 1918 | (84,28) 1919 | (13,15) 1920 | (12,50) 1921 | (23,16) 1922 | (9,47) 1923 | (3,23) 1924 | (17,49) 1925 | (62,1) 1926 | (34,13) 1927 | (46,49) 1928 | (7,41) 1929 | (34,99) 1930 | (1,76) 1931 | (5,32) 1932 | (47,26) 1933 | (1,47) 1934 | (16,65) 1935 | (11,15) 1936 | (6,26) 1937 | (38,85) 1938 | (11,24) 1939 | (65,70) 1940 | (46,24) 1941 | (8,31) 1942 | (6,25) 1943 | (42,26) 1944 | (43,30) 1945 | (12,42) 1946 | (13,19) 1947 | (2,33) 1948 | (23,77) 1949 | (30,115) 1950 | (25,26) 1951 | (52,46) 1952 | (84,59) 1953 | (21,31) 1954 | (31,42) 1955 | (18,28) 1956 | (27,74) 1957 | (23,20) 1958 | (12,12) 1959 | (11,22) 1960 | (18,15) 1961 | (79,23) 1962 | (14,20) 1963 | (48,15) 1964 | (23,25) 1965 | (50,15) 1966 | (32,25) 1967 | (61,51) 1968 | (17,89) 1969 | (33,26) 1970 | (40,28) 1971 | (37,32) 1972 | (52,36) 1973 | (46,42) 1974 | (6,47) 1975 | (17,39) 1976 | (22,47) 1977 | (8,20) 1978 | (23,49) 1979 | (81,66) 1980 | (29,86) 1981 | (48,51) 1982 | (33,50) 1983 | (27,31) 1984 | (14,47) 1985 | (12,58) 1986 | (24,57) 1987 | (19,61) 1988 | (2,35) 1989 | (12,39) 1990 | (19,16) 1991 | (71,99) 1992 | (10,34) 1993 | (76,151) 1994 | (14,17) 1995 | (26,16) 1996 | (45,76) 1997 | (50,119) 1998 | (15,25) 1999 | (40,47) 2000 | (27,25) 2001 | (54,128) 2002 | (47,85) 2003 | (24,39) 2004 | (22,24) 2005 | (5,19) 2006 | (4,136) 2007 | (4,59) 2008 | (59,48) 2009 | (2,42) 2010 | (9,24) 2011 | (6,22) 2012 | (6,44) 2013 | (6,18) 2014 | (15,31) 2015 | (4,42) 2016 | (34,27) 2017 | (27,54) 2018 | (41,44) 2019 | (19,52) 2020 | (35,16) 2021 | (59,31) 2022 | (50,36) 2023 | (24,20) 2024 | (4,47) 2025 | (16,18) 2026 | (22,31) 2027 | (24,34) 2028 | (21,30) 2029 | (25,24) 2030 | (132,10) 2031 | (118,51) 2032 | (21,15) 2033 | (26,13) 2034 | (35,18) 2035 | (130,48) 2036 | (68,17) 2037 | (44,7) 2038 | (65,29) 2039 | (40,6) 2040 | (34,18) 2041 | (58,30) 2042 | (139,88) 2043 | (34,46) 2044 | (60,6) 2045 | (51,30) 2046 | (150,62) 2047 | (141,46) 2048 | (104,70) 2049 | (36,33) 2050 | (21,17) 2051 | (14,15) 2052 | (37,19) 2053 | (45,42) 2054 | (49,23) 2055 | (31,12) 2056 | (61,16) 2057 | (46,11) 2058 | (183,59) 2059 | (82,16) 2060 | (64,32) 2061 | (105,55) 2062 | (81,43) 2063 | (90,18) 2064 | (65,13) 2065 | (43,12) 2066 | (80,19) 2067 | (53,4) 2068 | (93,14) 2069 | (61,11) 2070 | (44,15) 2071 | (69,20) 2072 | (108,27) 2073 | (38,13) 2074 | (40,9) 2075 | (28,12) 2076 | (51,53) 2077 | (54,23) 2078 | (191,17) 2079 | (110,13) 2080 | (72,30) 2081 | (45,14) 2082 | (114,23) 2083 | (42,6) 2084 | (53,8) 2085 | (104,39) 2086 | (130,35) 2087 | (113,31) 2088 | (106,31) 2089 | (62,27) 2090 | (72,24) 2091 | (95,15) 2092 | (30,11) 2093 | (178,14) 2094 | (54,6) 2095 | (58,18) 2096 | (43,2) 2097 | (98,19) 2098 | (96,20) 2099 | (46,5) 2100 | (183,5) 2101 | (61,33) 2102 | (85,51) 2103 | (36,27) 2104 | (68,7) 2105 | (45,28) 2106 | (19,18) 2107 | (28,24) 2108 | (53,26) 2109 | (26,9) 2110 | (20,15) 2111 | (72,2) 2112 | (71,8) 2113 | (68,68) 2114 | (109,78) 2115 | (51,44) 2116 | (59,22) 2117 | (51,25) 2118 | (62,21) 2119 | (48,5) 2120 | (78,22) 2121 | (163,54) 2122 | (37,16) 2123 | (67,28) 2124 | (52,7) 2125 | (67,16) 2126 | (43,19) 2127 | (146,23) 2128 | (88,20) 2129 | (77,21) 2130 | (44,8) 2131 | (37,3) 2132 | (44,11) 2133 | (91,15) 2134 | (52,13) 2135 | (36,12) 2136 | (109,31) 2137 | (69,24) 2138 | (62,15) 2139 | (115,13) 2140 | (91,20) 2141 | (56,4) 2142 | (34,16) 2143 | (31,22) 2144 | (36,83) 2145 | (107,22) 2146 | (115,31) 2147 | (131,24) 2148 | (39,22) 2149 | (72,44) 2150 | (37,27) 2151 | (14,21) 2152 | (2,24) 2153 | (25,22) 2154 | (81,8) 2155 | (6,72) 2156 | (71,15) 2157 | (52,35) 2158 | (16,21) 2159 | (375,0) 2160 | (33,24) 2161 | (464,65) 2162 | (116,10) 2163 | (238,137) 2164 | (270,3) 2165 | (70,1) 2166 | (235,15) 2167 | (2,23) 2168 | (36,66) 2169 | (30,137) 2170 | (6,27) 2171 | (22,21) 2172 | (15,40) 2173 | (74,36) 2174 | (32,51) 2175 | (10,20) 2176 | (45,22) 2177 | (11,19) 2178 | (10,18) 2179 | (83,0) 2180 | (41,11) 2181 | (37,15) 2182 | (34,41) 2183 | (38,20) 2184 | (8,232) 2185 | (3,46) 2186 | (1,93) 2187 | (51,143) 2188 | (1,41) 2189 | (23,164) 2190 | (22,158) 2191 | (4,208) 2192 | (6,91) 2193 | (2,43) 2194 | (41,63) 2195 | (8,64) 2196 | (26,35) 2197 | (11,21) 2198 | (5,38) 2199 | (3,40) 2200 | (48,9) 2201 | (54,1) 2202 | (47,0) 2203 | (55,6) 2204 | (80,30) 2205 | (83,26) 2206 | (1,53) 2207 | (13,48) 2208 | (6,52) 2209 | (4,28) 2210 | (12,75) 2211 | (40,29) 2212 | (15,37) 2213 | (17,28) 2214 | (1,43) 2215 | (30,154) 2216 | (35,32) 2217 | (6,38) 2218 | (3,39) 2219 | (21,36) 2220 | (7,42) 2221 | (65,39) 2222 | (44,47) 2223 | (72,13) 2224 | (45,10) 2225 | (59,9) 2226 | (43,18) 2227 | (57,23) 2228 | (307,26) 2229 | (98,12) 2230 | (87,2) 2231 | (48,6) 2232 | (117,4) 2233 | (144,11) 2234 | (134,9) 2235 | (70,7) 2236 | (33,2) 2237 | (64,31) 2238 | (13,24) 2239 | (82,2) 2240 | (104,0) 2241 | (51,1) 2242 | (14,18) 2243 | (2,26) 2244 | (31,37) 2245 | (16,23) 2246 | (9,30) 2247 | (11,47) 2248 | (3,33) 2249 | (9,66) 2250 | (16,28) 2251 | (70,43) 2252 | (17,98) 2253 | (54,3) 2254 | (83,9) 2255 | (130,16) 2256 | (76,1) 2257 | (75,3) 2258 | (30,36) 2259 | (16,54) 2260 | (10,24) 2261 | (23,108) 2262 | (53,153) 2263 | (34,45) 2264 | (6,40) 2265 | (17,72) 2266 | (6,42) 2267 | (103,103) 2268 | (9,57) 2269 | (5,37) 2270 | (19,118) 2271 | (13,55) 2272 | (5,25) 2273 | (4,24) 2274 | (32,151) 2275 | (60,54) 2276 | (36,13) 2277 | (46,25) 2278 | (76,48) 2279 | (48,26) 2280 | (57,34) 2281 | (66,14) 2282 | (104,43) 2283 | (87,28) 2284 | (58,44) 2285 | (94,26) 2286 | (45,15) 2287 | (18,18) 2288 | (91,50) 2289 | (28,60) 2290 | (16,47) 2291 | (41,81) 2292 | (8,33) 2293 | (7,66) 2294 | (13,38) 2295 | (14,41) 2296 | (4,21) 2297 | (14,115) 2298 | (5,45) 2299 | (1,52) 2300 | (6,139) 2301 | (9,73) 2302 | (13,59) 2303 | (2,51) 2304 | (2,69) 2305 | (5,67) 2306 | (20,23) 2307 | (23,39) 2308 | (16,33) 2309 | (6,79) 2310 | (5,71) 2311 | (3,51) 2312 | (61,32) 2313 | (30,9) 2314 | (46,40) 2315 | (48,20) 2316 | (35,31) 2317 | (40,17) 2318 | (17,23) 2319 | (72,23) 2320 | (57,21) 2321 | (46,20) 2322 | (187,64) 2323 | (50,31) 2324 | (72,38) 2325 | (22,35) 2326 | (9,78) 2327 | (13,90) 2328 | (79,31) 2329 | (9,20) 2330 | (12,26) 2331 | (21,192) 2332 | (28,28) 2333 | (255,53) 2334 | (15,15) 2335 | (16,29) 2336 | (7,34) 2337 | (34,76) 2338 | (50,45) 2339 | (15,56) 2340 | (80,3) 2341 | (317,31) 2342 | (105,2) 2343 | (129,56) 2344 | (49,0) 2345 | (49,6) 2346 | (9,22) 2347 | (20,22) 2348 | (69,28) 2349 | (7,36) 2350 | (19,17) 2351 | (55,50) 2352 | (45,18) 2353 | (33,28) 2354 | (3,72) 2355 | (11,209) 2356 | (50,20) 2357 | (9,31) 2358 | (58,1) 2359 | (15,44) 2360 | (37,39) 2361 | (131,16) 2362 | (206,32) 2363 | (168,29) 2364 | (99,36) 2365 | (134,21) 2366 | (1096,107) 2367 | (83,1) 2368 | (154,1) 2369 | (52,12) 2370 | (63,9) 2371 | (69,13) 2372 | (39,21) 2373 | (16,50) 2374 | (20,32) 2375 | (43,22) 2376 | (122,11) 2377 | (332,56) 2378 | (77,15) 2379 | (136,23) 2380 | (113,51) 2381 | (327,79) 2382 | (278,0) 2383 | (84,0) 2384 | (179,26) 2385 | (162,0) 2386 | (130,7) 2387 | (107,1) 2388 | (96,6) 2389 | (214,2) 2390 | (153,6) 2391 | (56,1) 2392 | (204,29) 2393 | (88,16) 2394 | (158,22) 2395 | (89,6) 2396 | (100,0) 2397 | (65,0) 2398 | (68,0) 2399 | (58,0) 2400 | (68,24) 2401 | (38,22) 2402 | (73,37) 2403 | (120,68) 2404 | (61,17) 2405 | (102,110) 2406 | (1,68) 2407 | (71,17) 2408 | (118,85) 2409 | (17,53) 2410 | (62,24) 2411 | (71,0) 2412 | (73,0) 2413 | (45,3) 2414 | (63,25) 2415 | (51,9) 2416 | (43,6) 2417 | (19,13) 2418 | (79,16) 2419 | (49,3) 2420 | (94,4) 2421 | (87,10) 2422 | (73,3) 2423 | (53,5) 2424 | (53,7) 2425 | (52,14) 2426 | (113,15) 2427 | (66,9) 2428 | (76,7) 2429 | (154,15) 2430 | (59,5) 2431 | (44,3) 2432 | (61,9) 2433 | (63,0) 2434 | (193,0) 2435 | (81,21) 2436 | (77,1) 2437 | (283,119) 2438 | (57,2) 2439 | (102,13) 2440 | (64,1) 2441 | (69,0) 2442 | (101,34) 2443 | (74,9) 2444 | (255,24) 2445 | (93,7) 2446 | (54,8) 2447 | (60,12) 2448 | (237,8) 2449 | (339,23) 2450 | (284,21) 2451 | (268,12) 2452 | (139,16) 2453 | (253,4) 2454 | (121,36) 2455 | (123,15) 2456 | (117,2) 2457 | (101,5) 2458 | (96,17) 2459 | (57,10) 2460 | (61,8) 2461 | (58,4) 2462 | (37,11) 2463 | (73,28) 2464 | (69,27) 2465 | (6,43) 2466 | (42,23) 2467 | (36,18) 2468 | (91,31) 2469 | (105,13) 2470 | (40,16) 2471 | (61,5) 2472 | (58,5) 2473 | (73,11) 2474 | (111,28) 2475 | (128,44) 2476 | (105,18) 2477 | (49,16) 2478 | (3,34) 2479 | (49,8) 2480 | (67,19) 2481 | (59,34) 2482 | (72,12) 2483 | (85,29) 2484 | (90,20) 2485 | (44,22) 2486 | (68,30) 2487 | (49,17) 2488 | (141,29) 2489 | (66,51) 2490 | (53,15) 2491 | (320,32) 2492 | (59,33) 2493 | (64,47) 2494 | (25,27) 2495 | (11,16) 2496 | (52,50) 2497 | (43,36) 2498 | (52,63) 2499 | (38,23) 2500 | (41,34) 2501 | (27,69) 2502 | (8,21) 2503 | (6,35) 2504 | (330,10) 2505 | (80,22) 2506 | (113,13) 2507 | (49,7) 2508 | (1,131) 2509 | (1,63) 2510 | (1,208) 2511 | (1,56) 2512 | (1,66) 2513 | (1,58) 2514 | (1,109) 2515 | (1,44) 2516 | (1,120) 2517 | (1,113) 2518 | (1,145) 2519 | (1,460) 2520 | (1,122) 2521 | (1,1400) 2522 | (709,118) 2523 | (1,80) 2524 | (52,10) 2525 | (187,120) 2526 | (18,17) 2527 | (75,26) 2528 | (60,29) 2529 | (51,27) 2530 | (30,85) 2531 | (56,11) 2532 | (59,24) 2533 | (32,19) 2534 | (67,47) 2535 | (36,31) 2536 | (25,16) 2537 | (47,19) 2538 | (71,75) 2539 | (48,31) 2540 | (94,161) 2541 | (70,50) 2542 | (51,28) 2543 | (3,30) 2544 | (10,37) 2545 | (34,88) 2546 | (14,51) 2547 | (113,11) 2548 | (123,23) 2549 | (86,16) 2550 | (149,27) 2551 | (19,29) 2552 | (5,36) 2553 | (50,5) 2554 | (100,38) 2555 | (58,2) 2556 | (85,12) 2557 | (52,20) 2558 | (68,11) 2559 | (70,19) 2560 | (138,21) 2561 | (49,11) 2562 | (44,27) 2563 | (85,34) 2564 | (89,19) 2565 | (67,5) 2566 | (53,25) 2567 | (57,27) 2568 | (41,12) 2569 | (142,27) 2570 | (75,22) 2571 | (51,8) 2572 | (36,29) 2573 | (42,30) 2574 | (93,160) 2575 | (44,4) 2576 | (70,29) 2577 | (69,8) 2578 | (81,12) 2579 | (59,23) 2580 | (49,25) 2581 | (70,18) 2582 | (35,20) 2583 | (81,4) 2584 | (135,21) 2585 | (77,53) 2586 | (106,29) 2587 | (52,39) 2588 | (46,1) 2589 | (1,62) 2590 | (6,94) 2591 | (45,82) 2592 | (37,20) 2593 | (54,44) 2594 | (44,30) 2595 | (22,37) 2596 | (7,71) 2597 | (19,25) 2598 | (26,55) 2599 | (13,47) 2600 | (189,125) 2601 | (36,34) 2602 | (33,17) 2603 | (73,12) 2604 | (78,65) 2605 | (48,25) 2606 | (12,52) 2607 | (10,44) 2608 | (96,36) 2609 | (20,36) 2610 | (72,35) 2611 | (127,22) 2612 | (30,282) 2613 | (6,86) 2614 | (16,16) 2615 | (3,65) 2616 | (4,44) 2617 | (9,136) 2618 | (6,51) 2619 | (2,95) 2620 | (55,28) 2621 | (63,10) 2622 | (81,49) 2623 | (108,15) 2624 | (88,18) 2625 | (214,39) 2626 | (52,17) 2627 | (79,41) 2628 | (34,11) 2629 | (36,28) 2630 | (94,40) 2631 | (55,35) 2632 | (78,28) 2633 | (29,38) 2634 | (39,11) 2635 | (445,69) 2636 | (70,20) 2637 | (214,162) 2638 | (117,71) 2639 | (274,177) 2640 | (63,37) 2641 | (85,32) 2642 | (89,52) 2643 | (63,35) 2644 | (40,21) 2645 | (75,59) 2646 | (41,30) 2647 | (95,26) 2648 | (121,11) 2649 | (57,39) 2650 | (68,12) 2651 | (80,24) 2652 | (140,88) 2653 | (65,16) 2654 | (131,50) 2655 | (127,29) 2656 | (178,64) 2657 | (33,12) 2658 | (79,19) 2659 | (28,18) 2660 | (15,24) 2661 | (15,22) 2662 | (139,40) 2663 | (80,31) 2664 | (64,22) 2665 | (87,63) 2666 | (82,9) 2667 | (23,33) 2668 | (84,85) 2669 | (1,67) 2670 | (99,63) 2671 | (91,65) 2672 | (79,73) 2673 | (149,30) 2674 | (192,42) 2675 | (26,77) 2676 | (90,33) 2677 | (54,37) 2678 | (122,44) 2679 | (93,9) 2680 | (164,25) 2681 | (57,1) 2682 | (32,37) 2683 | (86,47) 2684 | (118,0) 2685 | (189,43) 2686 | (122,27) 2687 | (251,35) 2688 | (35,1) 2689 | (96,23) 2690 | (68,28) 2691 | (165,52) 2692 | (103,37) 2693 | (99,45) 2694 | (56,27) 2695 | (245,85) 2696 | (62,19) 2697 | (94,34) 2698 | (83,28) 2699 | (107,32) 2700 | (65,48) 2701 | (91,52) 2702 | (56,32) 2703 | (92,36) 2704 | (54,26) 2705 | (26,21) 2706 | (76,44) 2707 | (115,52) 2708 | (99,54) 2709 | (87,11) 2710 | (76,16) 2711 | (94,18) 2712 | (39,12) 2713 | (52,19) 2714 | (92,59) 2715 | (50,8) 2716 | (79,0) 2717 | (550,125) 2718 | (62,18) 2719 | (21,53) 2720 | (17,43) 2721 | (19,27) 2722 | (40,19) 2723 | (55,20) 2724 | (105,136) 2725 | (103,48) 2726 | (54,13) 2727 | (236,84) 2728 | (30,21) 2729 | (190,103) 2730 | (53,36) 2731 | (22,19) 2732 | (68,9) 2733 | (109,15) 2734 | (76,17) 2735 | (61,4) 2736 | (21,45) 2737 | (45,29) 2738 | (69,32) 2739 | (54,31) 2740 | (40,8) 2741 | (90,84) 2742 | (109,54) 2743 | (47,9) 2744 | (204,82) 2745 | (31,25) 2746 | (55,39) 2747 | (67,29) 2748 | (159,127) 2749 | (76,31) 2750 | (48,27) 2751 | (458,72) 2752 | (94,12) 2753 | (63,5) 2754 | (67,7) 2755 | (67,1) 2756 | (54,11) 2757 | (57,25) 2758 | (120,19) 2759 | (31,36) 2760 | (68,21) 2761 | (99,29) 2762 | (45,21) 2763 | (101,30) 2764 | (41,42) 2765 | (62,53) 2766 | (24,22) 2767 | (4,46) 2768 | (5,31) 2769 | (33,34) 2770 | (33,62) 2771 | (23,26) 2772 | (11,44) 2773 | (20,142) 2774 | (33,67) 2775 | (36,74) 2776 | (16,32) 2777 | (39,52) 2778 | (1,82) 2779 | (6,109) 2780 | (32,144) 2781 | (26,132) 2782 | (40,53) 2783 | (66,28) 2784 | (52,37) 2785 | (29,32) 2786 | (39,39) 2787 | (57,56) 2788 | (25,58) 2789 | (40,30) 2790 | (36,22) 2791 | (61,65) 2792 | (74,53) 2793 | (118,103) 2794 | (19,32) 2795 | (59,52) 2796 | (31,23) 2797 | (53,43) 2798 | (34,26) 2799 | (58,65) 2800 | (196,119) 2801 | (50,14) 2802 | (156,55) 2803 | (184,54) 2804 | (15,29) 2805 | (81,42) 2806 | (28,32) 2807 | (35,25) 2808 | (127,91) 2809 | (69,124) 2810 | (61,81) 2811 | (11,79) 2812 | (36,21) 2813 | (62,50) 2814 | (24,19) 2815 | (48,36) 2816 | (59,7) 2817 | (66,10) 2818 | (135,23) 2819 | (134,29) 2820 | (126,3) 2821 | (81,2) 2822 | (92,8) 2823 | (77,3) 2824 | (50,37) 2825 | (53,80) 2826 | (61,19) 2827 | (5,41) 2828 | (28,127) 2829 | (31,49) 2830 | (33,55) 2831 | (22,74) 2832 | (6,165) 2833 | (21,137) 2834 | (59,68) 2835 | (37,30) 2836 | (17,27) 2837 | (27,23) 2838 | (36,58) 2839 | (88,332) 2840 | (86,158) 2841 | (6,324) 2842 | (67,276) 2843 | (88,155) 2844 | (45,219) 2845 | (15,137) 2846 | (60,276) 2847 | (57,116) 2848 | (78,225) 2849 | (36,177) 2850 | (3,60) 2851 | (5,83) 2852 | (30,46) 2853 | (45,70) 2854 | (29,39) 2855 | (7,59) 2856 | (17,160) 2857 | (33,47) 2858 | (18,33) 2859 | (9,40) 2860 | (15,26) 2861 | (7,55) 2862 | (13,65) 2863 | (38,99) 2864 | (19,88) 2865 | (64,12) 2866 | (83,12) 2867 | (19,66) 2868 | (1,70) 2869 | (1,123) 2870 | (1,61) 2871 | (14,50) 2872 | (33,39) 2873 | (24,55) 2874 | (13,33) 2875 | (31,112) 2876 | (19,19) 2877 | (8,91) 2878 | (27,38) 2879 | (2,65) 2880 | (8,76) 2881 | (60,172) 2882 | (48,86) 2883 | (70,28) 2884 | (40,12) 2885 | (41,19) 2886 | (136,43) 2887 | (50,24) 2888 | (85,30) 2889 | (133,38) 2890 | (121,23) 2891 | (113,8) 2892 | (67,4) 2893 | (52,24) 2894 | (96,41) 2895 | (103,0) 2896 | (63,2) 2897 | (97,29) 2898 | (161,89) 2899 | (95,30) 2900 | (22,23) 2901 | (206,54) 2902 | (99,30) 2903 | (44,14) 2904 | (202,77) 2905 | (137,85) 2906 | (44,31) 2907 | (60,11) 2908 | (214,90) 2909 | (65,2) 2910 | (82,17) 2911 | (164,55) 2912 | (50,43) 2913 | (111,27) 2914 | (54,32) 2915 | (61,44) 2916 | (84,36) 2917 | (47,35) 2918 | (57,59) 2919 | (19,30) 2920 | (28,23) 2921 | (46,22) 2922 | (109,34) 2923 | (96,25) 2924 | (41,17) 2925 | (111,31) 2926 | (70,22) 2927 | (92,28) 2928 | (49,36) 2929 | (63,54) 2930 | (56,10) 2931 | (86,28) 2932 | (33,23) 2933 | (61,25) 2934 | (98,23) 2935 | (34,32) 2936 | (90,38) 2937 | (35,22) 2938 | (74,28) 2939 | (123,37) 2940 | (67,27) 2941 | (111,45) 2942 | (135,49) 2943 | (69,21) 2944 | (58,34) 2945 | (583,442) 2946 | (24,12) 2947 | (262,132) 2948 | (68,36) 2949 | (43,28) 2950 | (53,27) 2951 | (138,100) 2952 | (68,32) 2953 | (119,68) 2954 | (222,149) 2955 | (339,111) 2956 | (22,25) 2957 | (62,30) 2958 | (39,31) 2959 | (63,29) 2960 | (62,51) 2961 | (36,5) 2962 | (129,54) 2963 | (163,46) 2964 | (94,35) 2965 | (70,12) 2966 | (47,22) 2967 | (110,32) 2968 | (74,35) 2969 | (50,47) 2970 | (48,16) 2971 | (221,60) 2972 | (102,31) 2973 | (70,27) 2974 | (88,29) 2975 | (50,17) 2976 | (47,30) 2977 | (72,49) 2978 | (53,23) 2979 | (122,73) 2980 | (81,11) 2981 | (49,21) 2982 | (105,51) 2983 | (163,95) 2984 | (29,29) 2985 | (74,24) 2986 | (46,10) 2987 | (38,11) 2988 | (50,12) 2989 | (67,26) 2990 | (96,31) 2991 | (56,44) 2992 | (64,34) 2993 | (52,26) 2994 | (218,79) 2995 | (166,69) 2996 | (86,55) 2997 | (91,30) 2998 | (71,29) 2999 | (86,34) 3000 | (86,48) 3001 | (140,42) 3002 | (24,16) 3003 | (99,31) 3004 | (49,14) 3005 | (137,15) 3006 | (110,26) 3007 | (115,110) 3008 | (95,32) 3009 | (30,22) 3010 | (41,13) 3011 | (57,42) 3012 | (34,25) 3013 | (71,39) 3014 | (27,22) 3015 | (77,8) 3016 | (134,59) 3017 | (169,44) 3018 | (80,69) 3019 | (33,63) 3020 | (86,45) 3021 | (368,158) 3022 | (31,46) 3023 | (198,58) 3024 | (31,48) 3025 | (459,333) 3026 | (351,135) 3027 | (100,4) 3028 | (96,73) 3029 | (54,12) 3030 | (228,67) 3031 | (66,20) 3032 | (80,83) 3033 | (36,38) 3034 | (84,37) 3035 | (39,36) 3036 | (35,29) 3037 | (57,40) 3038 | (52,45) 3039 | (73,114) 3040 | (56,24) 3041 | (17,22) 3042 | (44,18) 3043 | (62,36) 3044 | (62,42) 3045 | (20,20) 3046 | (154,29) 3047 | (109,48) 3048 | (54,38) 3049 | (109,46) 3050 | (77,7) 3051 | (25,41) 3052 | (80,52) 3053 | (100,27) 3054 | (140,82) 3055 | (75,29) 3056 | (23,24) 3057 | (42,17) 3058 | (27,27) 3059 | (60,41) 3060 | (47,32) 3061 | (39,23) 3062 | (167,38) 3063 | (201,109) 3064 | (226,43) 3065 | (92,31) 3066 | (84,63) 3067 | (196,34) 3068 | (128,33) 3069 | (83,19) 3070 | (76,35) 3071 | (132,33) 3072 | (51,21) 3073 | (77,20) 3074 | (2,58) 3075 | (39,43) 3076 | (106,93) 3077 | (87,47) 3078 | (33,45) 3079 | (36,17) 3080 | (37,60) 3081 | (89,35) 3082 | (25,31) 3083 | (25,55) 3084 | (35,151) 3085 | (52,57) 3086 | (13,22) 3087 | (71,14) 3088 | (55,30) 3089 | (61,10) 3090 | (88,44) 3091 | (24,69) 3092 | (99,2) 3093 | (136,46) 3094 | (61,12) 3095 | (54,4) 3096 | (64,8) 3097 | (77,13) 3098 | (89,29) 3099 | (138,71) 3100 | (67,0) 3101 | (294,49) 3102 | (122,37) 3103 | (45,31) 3104 | (105,5) 3105 | (61,2) 3106 | (319,2) 3107 | (56,17) 3108 | (222,1) 3109 | (33,1) 3110 | (214,23) 3111 | (90,0) 3112 | (104,41) 3113 | (218,78) 3114 | (49,22) 3115 | (82,38) 3116 | (153,31) 3117 | (66,15) 3118 | (66,26) 3119 | (122,3) 3120 | (159,67) 3121 | (79,28) 3122 | (65,28) 3123 | (139,28) 3124 | (144,22) 3125 | (50,64) 3126 | (76,4) 3127 | (133,24) 3128 | (85,11) 3129 | (114,19) 3130 | (216,46) 3131 | (85,1) 3132 | (113,33) 3133 | (79,3) 3134 | (104,1) 3135 | (134,40) 3136 | (85,23) 3137 | (137,40) 3138 | (68,23) 3139 | (71,22) 3140 | (44,21) 3141 | (199,72) 3142 | (172,31) 3143 | (56,6) 3144 | (45,8) 3145 | (139,53) 3146 | (52,25) 3147 | (107,5) 3148 | (28,49) 3149 | (69,165) 3150 | (34,19) 3151 | (68,25) 3152 | (41,28) 3153 | (183,87) 3154 | (37,79) 3155 | (7,58) 3156 | (46,23) 3157 | (34,34) 3158 | (81,39) 3159 | (42,15) 3160 | (59,18) 3161 | (45,30) 3162 | (200,71) 3163 | (67,9) 3164 | (66,35) 3165 | (181,69) 3166 | (33,29) 3167 | (22,26) 3168 | (26,36) 3169 | (27,21) 3170 | (43,37) 3171 | (57,14) 3172 | (53,19) 3173 | (63,26) 3174 | (196,61) 3175 | (47,42) 3176 | (32,31) 3177 | (83,25) 3178 | (82,24) 3179 | (54,34) 3180 | (75,38) 3181 | (44,19) 3182 | (43,13) 3183 | (112,22) 3184 | (58,8) 3185 | (39,30) 3186 | (87,35) 3187 | (59,51) 3188 | (17,25) 3189 | (126,0) 3190 | (69,4) 3191 | (103,8) 3192 | (112,29) 3193 | (43,21) 3194 | (134,48) 3195 | (56,7) 3196 | (58,38) 3197 | (98,8) 3198 | (77,14) 3199 | (97,4) 3200 | (103,4) 3201 | (104,14) 3202 | (70,24) 3203 | (73,34) 3204 | (90,1) 3205 | (42,39) 3206 | (49,1) 3207 | (85,0) 3208 | (41,15) 3209 | (96,34) 3210 | (62,38) 3211 | (50,23) 3212 | (6,76) 3213 | (51,6) 3214 | (43,31) 3215 | (63,27) 3216 | (43,17) 3217 | (72,21) 3218 | (50,38) 3219 | (35,54) 3220 | (49,12) 3221 | (76,27) 3222 | (44,48) 3223 | (144,61) 3224 | (95,25) 3225 | (17,67) 3226 | (35,72) 3227 | (16,36) 3228 | (118,31) 3229 | (30,33) 3230 | (41,7) 3231 | (2,28) 3232 | (80,206) 3233 | (66,6) 3234 | (304,18) 3235 | (227,28) 3236 | (344,12) 3237 | (988,20) 3238 | (111,12) 3239 | (39,10) 3240 | (132,28) 3241 | (204,35) 3242 | (180,43) 3243 | (211,24) 3244 | (85,13) 3245 | (120,20) 3246 | (107,29) 3247 | (169,47) 3248 | (145,72) 3249 | (83,22) 3250 | (78,37) 3251 | (5658,219) 3252 | (133,48) 3253 | (153,63) 3254 | (71,27) 3255 | (119,65) 3256 | (140,49) 3257 | (124,83) 3258 | (84,40) 3259 | (151,44) 3260 | (130,26) 3261 | (142,11) 3262 | (322,82) 3263 | (84,24) 3264 | (151,21) 3265 | (472,62) 3266 | (375,14) 3267 | (273,12) 3268 | (88,10) 3269 | (28,39) 3270 | (50,39) 3271 | (229,12) 3272 | (230,20) 3273 | (306,60) 3274 | (78,47) 3275 | (119,33) 3276 | (43,38) 3277 | (140,48) 3278 | (153,21) 3279 | (39,24) 3280 | (58,22) 3281 | (72,26) 3282 | (97,2) 3283 | (460,72) 3284 | (50,30) 3285 | (146,47) 3286 | (97,58) 3287 | (153,22) 3288 | (66,46) 3289 | (101,27) 3290 | (248,60) 3291 | (69,14) 3292 | (611,185) 3293 | (92,24) 3294 | (175,37) 3295 | (98,14) 3296 | (71,3) 3297 | (419,59) 3298 | (81,10) 3299 | (383,7) 3300 | (157,10) 3301 | (175,31) 3302 | (179,24) 3303 | (28,13) 3304 | (80,0) 3305 | (212,24) 3306 | (106,23) 3307 | (42,21) 3308 | (173,61) 3309 | (100,20) 3310 | (72,0) 3311 | (85,24) 3312 | (45,27) 3313 | (95,6) 3314 | (169,31) 3315 | (97,37) 3316 | (87,4) 3317 | (97,19) 3318 | (77,52) 3319 | (92,75) 3320 | (77,54) 3321 | (145,18) 3322 | (63,24) 3323 | (96,14) 3324 | (75,46) 3325 | (43,62) 3326 | (37,25) 3327 | (50,32) 3328 | (37,33) 3329 | (22,33) 3330 | (238,24) 3331 | (61,26) 3332 | (96,32) 3333 | (423,154) 3334 | (967,44) 3335 | (122,18) 3336 | (132,37) 3337 | (97,61) 3338 | (62,4) 3339 | (72,15) 3340 | (65,93) 3341 | (87,38) 3342 | (65,14) 3343 | (156,68) 3344 | (232,3) 3345 | (48,50) 3346 | (145,44) 3347 | (155,29) 3348 | (117,47) 3349 | (106,107) 3350 | (250,173) 3351 | (157,36) 3352 | (112,41) 3353 | (63,31) 3354 | (161,50) 3355 | (58,19) 3356 | (20,26) 3357 | (319,31) 3358 | (98,6) 3359 | (120,10) 3360 | (79,9) 3361 | (29,31) 3362 | (754,60) 3363 | (127,109) 3364 | (258,36) 3365 | (29,19) 3366 | (173,15) 3367 | (82,13) 3368 | (33,38) 3369 | (67,10) 3370 | (694,3) 3371 | (89,30) 3372 | (41,43) 3373 | (34,24) 3374 | (128,73) 3375 | (190,5) 3376 | (337,63) 3377 | (54,17) 3378 | (131,59) 3379 | (186,41) 3380 | (490,41) 3381 | (93,11) 3382 | (162,13) 3383 | (133,13) 3384 | (101,49) 3385 | (183,10) 3386 | (152,65) 3387 | (264,39) 3388 | (205,49) 3389 | (194,19) 3390 | (186,56) 3391 | (101,26) 3392 | (235,31) 3393 | (141,39) 3394 | (335,50) 3395 | (42,25) 3396 | (150,12) 3397 | (60,14) 3398 | (184,86) 3399 | (121,48) 3400 | (28,21) 3401 | (180,93) 3402 | (66,24) 3403 | (81,29) 3404 | (56,19) 3405 | (161,51) 3406 | (125,43) 3407 | (85,7) 3408 | (34,22) 3409 | (78,25) 3410 | (51,52) 3411 | (57,24) 3412 | (108,29) 3413 | (75,21) 3414 | (139,29) 3415 | (62,28) 3416 | (32,22) 3417 | (70,2) 3418 | (43,26) 3419 | (120,21) 3420 | (62,13) 3421 | (54,24) 3422 | (68,10) 3423 | (145,47) 3424 | (79,18) 3425 | (177,62) 3426 | (61,31) 3427 | (49,32) 3428 | (122,41) 3429 | (73,35) 3430 | (357,65) 3431 | (222,66) 3432 | (529,41) 3433 | (98,34) 3434 | (282,40) 3435 | (220,11) 3436 | (263,31) 3437 | (145,1) 3438 | (71,23) 3439 | (112,21) 3440 | (19,24) 3441 | (108,45) 3442 | (53,6) 3443 | (233,19) 3444 | (216,78) 3445 | (89,0) 3446 | (206,39) 3447 | (145,24) 3448 | (106,18) 3449 | (79,15) 3450 | (65,11) 3451 | (71,16) 3452 | (88,19) 3453 | (83,8) 3454 | (97,9) 3455 | (57,5) 3456 | (78,30) 3457 | (105,9) 3458 | (293,12) 3459 | (64,5) 3460 | (98,31) 3461 | (188,22) 3462 | (213,28) 3463 | (64,16) 3464 | (88,5) 3465 | (136,19) 3466 | (62,0) 3467 | (158,21) 3468 | (103,5) 3469 | (161,21) 3470 | (255,23) 3471 | (104,13) 3472 | (107,24) 3473 | (82,14) 3474 | (60,22) 3475 | (205,38) 3476 | (78,13) 3477 | (130,29) 3478 | (110,64) 3479 | (144,31) 3480 | (60,2) 3481 | (86,12) 3482 | (91,3) 3483 | (27,41) 3484 | (130,8) 3485 | (120,31) 3486 | (61,23) 3487 | (58,3) 3488 | (149,5) 3489 | (267,9) 3490 | (96,15) 3491 | (187,11) 3492 | (220,30) 3493 | (70,6) 3494 | (132,2) 3495 | (59,19) 3496 | (267,7) 3497 | (61,24) 3498 | (67,14) 3499 | (18,23) 3500 | (93,2) 3501 | (161,1) 3502 | (171,42) 3503 | (51,142) 3504 | (33,37) 3505 | (8,39) 3506 | (28,44) 3507 | (289,103) 3508 | (68,33) 3509 | (112,40) 3510 | (65,17) 3511 | (106,36) 3512 | (94,33) 3513 | (298,102) 3514 | (33,27) 3515 | (51,45) 3516 | (117,44) 3517 | (84,20) 3518 | (92,21) 3519 | (181,64) 3520 | (124,24) 3521 | (92,48) 3522 | (80,25) 3523 | (54,48) 3524 | (55,41) 3525 | (72,25) 3526 | (85,9) 3527 | (54,5) 3528 | (89,4) 3529 | (140,16) 3530 | (120,4) 3531 | (94,20) 3532 | (115,76) 3533 | (92,41) 3534 | (62,29) 3535 | (62,37) 3536 | (122,48) 3537 | (89,26) 3538 | (116,29) 3539 | (94,37) 3540 | (74,16) 3541 | (71,12) 3542 | (71,28) 3543 | (74,37) 3544 | (155,48) 3545 | (31,26) 3546 | (48,8) 3547 | (90,36) 3548 | (78,39) 3549 | (210,41) 3550 | (53,21) 3551 | (126,47) 3552 | (50,11) 3553 | (209,57) 3554 | (49,24) 3555 | (136,40) 3556 | (126,28) 3557 | (87,19) 3558 | (77,22) 3559 | (57,3) 3560 | (53,17) 3561 | (103,6) 3562 | (69,12) 3563 | (62,26) 3564 | (69,42) 3565 | (107,26) 3566 | (126,30) 3567 | (87,13) 3568 | (64,18) 3569 | (50,3) 3570 | (460,108) 3571 | (47,14) 3572 | (49,31) 3573 | (53,11) 3574 | (122,34) 3575 | (73,20) 3576 | (71,20) 3577 | (74,17) 3578 | (40,15) 3579 | (62,5) 3580 | (41,9) 3581 | (134,44) 3582 | (65,23) 3583 | (56,12) 3584 | (32,12) 3585 | (34,28) 3586 | (89,9) 3587 | (129,11) 3588 | (87,8) 3589 | (97,21) 3590 | (104,38) 3591 | (25,18) 3592 | (40,38) 3593 | (85,38) 3594 | (32,26) 3595 | (42,1) 3596 | (49,29) 3597 | (76,6) 3598 | (157,14) 3599 | (10,72) 3600 | (86,15) 3601 | (9,46) 3602 | (9,80) 3603 | (1,78) 3604 | (15,28) 3605 | (99,8) 3606 | (55,33) 3607 | (88,7) 3608 | (32,40) 3609 | (1,83) 3610 | (1,240) 3611 | (7,33) 3612 | (3,35) 3613 | (5,52) 3614 | (9,38) 3615 | (7,35) 3616 | (35,66) 3617 | (4,129) 3618 | (19,62) 3619 | (20,29) 3620 | (39,55) 3621 | (27,33) 3622 | (17,48) 3623 | (30,31) 3624 | (51,26) 3625 | (5,39) 3626 | (15,83) 3627 | (16,474) 3628 | (46,46) 3629 | (29,34) 3630 | (4,40) 3631 | (8,43) 3632 | (4,70) 3633 | (79,83) 3634 | (64,35) 3635 | (123,29) 3636 | (32,59) 3637 | (15,33) 3638 | (91,12) 3639 | (155,16) 3640 | (165,16) 3641 | (113,12) 3642 | (94,15) 3643 | (213,20) 3644 | (163,16) 3645 | (93,15) 3646 | (90,10) 3647 | (395,34) 3648 | (115,20) 3649 | (384,30) 3650 | (183,20) 3651 | (105,12) 3652 | (424,41) 3653 | (323,33) 3654 | (647,62) 3655 | (378,49) 3656 | (110,20) 3657 | (157,16) 3658 | (94,10) 3659 | (99,10) 3660 | (122,12) 3661 | (135,17) 3662 | (151,57) 3663 | (75,13) 3664 | (414,32) 3665 | (14,28) 3666 | (2,57) 3667 | (133,21) 3668 | (21,44) 3669 | (57,4) 3670 | (12,40) 3671 | (30,45) 3672 | (23,38) 3673 | (5,40) 3674 | (23,36) 3675 | (90,16) 3676 | (74,5) 3677 | (53,63) 3678 | (11,48) 3679 | (106,52) 3680 | (9,27) 3681 | (64,2) 3682 | (80,32) 3683 | (24,67) 3684 | (2,49) 3685 | (31,19) 3686 | (108,51) 3687 | (75,12) 3688 | (108,55) 3689 | (55,45) 3690 | (3,52) 3691 | (57,29) 3692 | (33,31) 3693 | (45,44) 3694 | (4,57) 3695 | (13,52) 3696 | (6,58) 3697 | (13,78) 3698 | (9,71) 3699 | (8,172) 3700 | (7,47) 3701 | (1,181) 3702 | (1,96) 3703 | (6,32) 3704 | (46,29) 3705 | (77,16) 3706 | (41,24) 3707 | (112,0) 3708 | (344,0) 3709 | (104,10) 3710 | (53,0) 3711 | (88,3) 3712 | (167,35) 3713 | (89,15) 3714 | (9,49) 3715 | (115,5) 3716 | (97,45) 3717 | (74,47) 3718 | (101,32) 3719 | (145,10) 3720 | (53,16) 3721 | (72,5) 3722 | (87,34) 3723 | (64,21) 3724 | (63,46) 3725 | (75,17) 3726 | (79,74) 3727 | (35,41) 3728 | (104,89) 3729 | (68,13) 3730 | (156,59) 3731 | (82,45) 3732 | (51,15) 3733 | (129,68) 3734 | (42,24) 3735 | (124,85) 3736 | (27,30) 3737 | (28,27) 3738 | (81,46) 3739 | (92,45) 3740 | (62,10) 3741 | (95,28) 3742 | (23,51) 3743 | (64,40) 3744 | (33,32) 3745 | (151,3) 3746 | (20,25) 3747 | (45,47) 3748 | (77,39) 3749 | (306,69) 3750 | (282,111) 3751 | (72,8) 3752 | (101,11) 3753 | (151,28) 3754 | (192,63) 3755 | (233,49) 3756 | (235,35) 3757 | (57,15) 3758 | (213,30) 3759 | (101,7) 3760 | (65,4) 3761 | (84,8) 3762 | (198,21) 3763 | (78,26) 3764 | (84,18) 3765 | (201,61) 3766 | (57,9) 3767 | (145,19) 3768 | (92,9) 3769 | (68,19) 3770 | (48,24) 3771 | (136,4) 3772 | (25,39) 3773 | (48,35) 3774 | (16,34) 3775 | (401,57) 3776 | (78,3) 3777 | (148,22) 3778 | (88,22) 3779 | (34,31) 3780 | (177,107) 3781 | (70,67) 3782 | (211,109) 3783 | (629,242) 3784 | (50,26) 3785 | (67,11) 3786 | (109,30) 3787 | (138,24) 3788 | (190,7) 3789 | (168,27) 3790 | (65,6) 3791 | (113,32) 3792 | (138,23) 3793 | (82,30) 3794 | (146,18) 3795 | (264,29) 3796 | (38,37) 3797 | (91,27) 3798 | (109,2) 3799 | (14,29) 3800 | (71,21) 3801 | (92,22) 3802 | (67,13) 3803 | (138,9) 3804 | (34,23) 3805 | (135,2) 3806 | (89,66) 3807 | (267,28) 3808 | (180,9) 3809 | (135,41) 3810 | (55,18) 3811 | (1964,56) 3812 | (467,40) 3813 | (432,66) 3814 | (121,93) 3815 | (63,21) 3816 | (120,74) 3817 | (85,2) 3818 | (95,40) 3819 | (89,17) 3820 | (45,11) 3821 | (182,33) 3822 | (11,69) 3823 | (268,58) 3824 | (84,25) 3825 | (45,17) 3826 | (73,51) 3827 | (173,50) 3828 | (227,22) 3829 | (339,27) 3830 | (64,33) 3831 | (56,25) 3832 | (73,23) 3833 | (352,43) 3834 | (164,9) 3835 | (87,55) 3836 | (48,44) 3837 | (74,2) 3838 | (150,0) 3839 | (151,0) 3840 | (114,0) 3841 | (79,1) 3842 | (64,20) 3843 | (137,10) 3844 | (64,46) 3845 | (36,30) 3846 | (104,17) 3847 | (177,18) 3848 | (236,1) 3849 | (91,14) 3850 | (164,27) 3851 | (229,110) 3852 | (65,1) 3853 | (65,15) 3854 | (92,4) 3855 | (43,32) 3856 | (67,33) 3857 | (113,43) 3858 | (43,43) 3859 | (64,41) 3860 | (100,6) 3861 | (198,0) 3862 | (103,33) 3863 | (109,1) 3864 | (53,20) 3865 | (222,21) 3866 | (82,31) 3867 | (240,5) 3868 | (14,38) 3869 | (163,13) 3870 | (17,21) 3871 | (129,0) 3872 | (124,50) 3873 | (90,21) 3874 | (60,15) 3875 | (88,28) 3876 | (109,7) 3877 | (189,24) 3878 | (81,7) 3879 | (47,34) 3880 | (50,34) 3881 | (58,21) 3882 | (107,35) 3883 | (141,30) 3884 | (100,26) 3885 | (105,8) 3886 | (124,12) 3887 | (38,31) 3888 | (63,18) 3889 | (5,76) 3890 | (38,36) 3891 | (19,26) 3892 | (93,47) 3893 | (71,71) 3894 | (25,40) 3895 | (45,37) 3896 | (11,29) 3897 | (95,60) 3898 | (81,58) 3899 | (20,30) 3900 | (87,76) 3901 | (61,6) 3902 | (151,7) 3903 | (191,4) 3904 | (117,5) 3905 | (69,1) 3906 | (41,31) 3907 | (74,8) 3908 | (57,0) 3909 | (88,0) 3910 | (88,2) 3911 | (92,11) 3912 | (86,9) 3913 | (135,4) 3914 | (92,1) 3915 | (57,11) 3916 | (68,22) 3917 | (41,20) 3918 | (27,24) 3919 | (32,18) 3920 | (88,35) 3921 | (140,129) 3922 | (95,54) 3923 | (65,30) 3924 | (94,31) 3925 | (79,8) 3926 | (79,21) 3927 | (47,23) 3928 | (44,25) 3929 | (96,3) 3930 | (22,36) 3931 | (58,101) 3932 | (49,56) 3933 | (39,38) 3934 | (21,26) 3935 | (7,73) 3936 | (16,124) 3937 | (2,86) 3938 | (7,37) 3939 | (42,141) 3940 | (2,39) 3941 | (2,79) 3942 | (3,32) 3943 | (2,106) 3944 | (8,53) 3945 | (55,17) 3946 | (108,35) 3947 | (65,9) 3948 | (59,17) 3949 | (301,60) 3950 | (104,27) 3951 | (115,33) 3952 | (109,35) 3953 | (78,11) 3954 | (21,28) 3955 | (108,30) 3956 | (74,4) 3957 | (59,6) 3958 | (100,25) 3959 | (199,48) 3960 | (104,86) 3961 | (68,8) 3962 | (66,21) 3963 | (80,9) 3964 | (141,32) 3965 | (89,10) 3966 | (42,33) 3967 | (59,21) 3968 | (67,22) 3969 | (124,31) 3970 | (79,29) 3971 | (42,14) 3972 | (124,20) 3973 | (144,19) 3974 | (199,31) 3975 | (44,36) 3976 | (108,10) 3977 | (71,9) 3978 | (94,14) 3979 | (147,24) 3980 | (117,24) 3981 | (84,16) 3982 | (73,15) 3983 | (278,18) 3984 | (19,38) 3985 | (75,16) 3986 | (88,23) 3987 | (21,19) 3988 | (50,57) 3989 | (71,13) 3990 | (97,14) 3991 | (84,21) 3992 | (63,19) 3993 | (33,20) 3994 | (227,88) 3995 | (194,35) 3996 | (281,33) 3997 | (374,98) 3998 | (2,72) 3999 | (11,53) 4000 | (135,22) 4001 | (140,28) 4002 | (216,52) 4003 | (121,31) 4004 | (34,29) 4005 | (94,19) 4006 | (98,15) 4007 | (95,16) 4008 | (86,0) 4009 | (143,29) 4010 | (79,2) 4011 | (92,30) 4012 | (103,18) 4013 | (60,4) 4014 | (97,62) 4015 | (185,63) 4016 | (4,87) 4017 | (151,12) 4018 | (52,31) 4019 | (168,8) 4020 | (402,18) 4021 | (420,37) 4022 | (89,22) 4023 | (104,15) 4024 | (102,8) 4025 | (88,13) 4026 | (55,2) 4027 | (122,2) 4028 | (71,4) 4029 | (64,4) 4030 | (70,3) 4031 | (70,15) 4032 | (98,27) 4033 | (164,11) 4034 | (162,45) 4035 | (174,14) 4036 | (99,15) 4037 | (81,3) 4038 | (95,1) 4039 | (72,10) 4040 | (89,12) 4041 | (77,5) 4042 | (51,20) 4043 | (306,7) 4044 | (58,29) 4045 | (73,2) 4046 | (65,8) 4047 | (71,24) 4048 | (99,17) 4049 | (40,33) 4050 | (28,26) 4051 | (76,58) 4052 | (69,18) 4053 | (186,57) 4054 | (263,47) 4055 | (150,35) 4056 | (160,40) 4057 | (56,15) 4058 | (91,21) 4059 | (97,36) 4060 | (175,51) 4061 | (250,76) 4062 | (70,9) 4063 | (36,32) 4064 | (126,4) 4065 | (157,15) 4066 | (103,3) 4067 | (27,36) 4068 | (67,25) 4069 | (110,4) 4070 | (75,2) 4071 | (48,21) 4072 | (201,101) 4073 | (134,14) 4074 | (220,55) 4075 | (61,7) 4076 | (175,32) 4077 | (70,14) 4078 | (493,117) 4079 | (77,17) 4080 | (106,0) 4081 | (143,17) 4082 | (105,38) 4083 | (262,83) 4084 | (102,11) 4085 | (103,31) 4086 | (828,159) 4087 | (162,18) 4088 | (135,87) 4089 | (766,62) 4090 | (54,7) 4091 | (257,40) 4092 | (22,52) 4093 | (89,5) 4094 | (104,5) 4095 | (118,10) 4096 | (108,6) 4097 | (92,6) 4098 | (71,5) 4099 | (118,9) 4100 | (123,9) 4101 | (272,20) 4102 | (281,20) 4103 | (61,47) 4104 | (37,23) 4105 | (425,185) 4106 | (54,22) 4107 | (112,28) 4108 | (47,27) 4109 | (58,32) 4110 | (134,31) 4111 | (83,44) 4112 | (75,25) 4113 | (212,4) 4114 | (166,10) 4115 | (143,54) 4116 | (210,63) 4117 | (452,30) 4118 | (751,53) 4119 | (765,55) 4120 | (77,2) 4121 | (108,16) 4122 | (65,19) 4123 | (84,10) 4124 | (155,50) 4125 | (108,38) 4126 | (150,4) 4127 | (163,2) 4128 | (45,23) 4129 | (1,55) 4130 | (1,46) 4131 | (85,8) 4132 | (118,13) 4133 | (66,32) 4134 | (62,3) 4135 | (57,6) 4136 | (538,7) 4137 | (114,16) 4138 | (191,2) 4139 | (100,5) 4140 | (116,1) 4141 | (92,27) 4142 | (77,44) 4143 | (321,105) 4144 | (135,1) 4145 | (468,35) 4146 | (766,154) 4147 | (331,56) 4148 | (585,72) 4149 | (202,17) 4150 | (515,79) 4151 | (421,124) 4152 | (1704,146) 4153 | (308,30) 4154 | (99,12) 4155 | (63,3) 4156 | (177,37) 4157 | (84,3) 4158 | (127,21) 4159 | (83,7) 4160 | (165,9) 4161 | (524,18) 4162 | (153,28) 4163 | (338,61) 4164 | (470,70) 4165 | (663,24) 4166 | (195,34) 4167 | (192,13) 4168 | (79,12) 4169 | (194,20) 4170 | (857,107) 4171 | (1033,55) 4172 | (97,11) 4173 | (127,4) 4174 | (130,33) 4175 | (47,17) 4176 | (37,41) 4177 | (43,29) 4178 | (72,14) 4179 | (75,23) 4180 | (69,16) 4181 | (48,17) 4182 | (124,73) 4183 | (82,81) 4184 | (85,37) 4185 | (46,8) 4186 | (120,6) 4187 | (91,37) 4188 | (1281,77) 4189 | (18,20) 4190 | (69,17) 4191 | (64,36) 4192 | (90,53) 4193 | (58,43) 4194 | (151,26) 4195 | (39,40) 4196 | (29,28) 4197 | (42,28) 4198 | (66,19) 4199 | (35,24) 4200 | (87,59) 4201 | (80,28) 4202 | (65,36) 4203 | (56,36) 4204 | (82,15) 4205 | (90,46) 4206 | (31,20) 4207 | (81,65) 4208 | (84,48) 4209 | (82,23) 4210 | (270,11) 4211 | (112,54) 4212 | (94,1) 4213 | (149,21) 4214 | (197,9) 4215 | (80,2) 4216 | (130,79) 4217 | (43,24) 4218 | (82,54) 4219 | (118,48) 4220 | (59,28) 4221 | (79,26) 4222 | (87,30) 4223 | (55,57) 4224 | (55,29) 4225 | (3,38) 4226 | (66,18) 4227 | (90,8) 4228 | (152,18) 4229 | (121,9) 4230 | (13,88) 4231 | (25,23) 4232 | (111,61) 4233 | (69,2) 4234 | (95,14) 4235 | (211,53) 4236 | (221,25) 4237 | (107,11) 4238 | (121,4) 4239 | (59,10) 4240 | (460,23) 4241 | (54,54) 4242 | (46,56) 4243 | (164,20) 4244 | (237,41) 4245 | (4,76) 4246 | (6,54) 4247 | (15,108) 4248 | (12,25) 4249 | (102,16) 4250 | (63,12) 4251 | (75,1) 4252 | (98,21) 4253 | (88,25) 4254 | (40,24) 4255 | (5,92) 4256 | (3,28) 4257 | (89,18) 4258 | (92,10) 4259 | (133,43) 4260 | (173,60) 4261 | (67,23) 4262 | (139,13) 4263 | (377,67) 4264 | (15,27) 4265 | (1,77) 4266 | (7,50) 4267 | (3,48) 4268 | (182,15) 4269 | (14,32) 4270 | (15,36) 4271 | (10,75) 4272 | (14,76) 4273 | (10,67) 4274 | (14,68) 4275 | (29,17) 4276 | (66,2) 4277 | (272,77) 4278 | (130,49) 4279 | (32,23) 4280 | (500,120) 4281 | (297,86) 4282 | (89,36) 4283 | (253,74) 4284 | (94,27) 4285 | (166,96) 4286 | (59,2) 4287 | (62,20) 4288 | (1179,148) 4289 | (96,19) 4290 | (159,34) 4291 | (78,8) 4292 | (122,7) 4293 | (90,3) 4294 | (1699,256) 4295 | (110,16) 4296 | (681,107) 4297 | (105,16) 4298 | (202,16) 4299 | (407,52) 4300 | (111,4) 4301 | (565,89) 4302 | (136,21) 4303 | (151,10) 4304 | (244,19) 4305 | (667,66) 4306 | (3596,359) 4307 | (161,16) 4308 | (171,27) 4309 | (167,31) 4310 | (153,14) 4311 | (262,31) 4312 | (489,88) 4313 | (267,24) 4314 | (149,22) 4315 | (106,21) 4316 | (374,54) 4317 | (233,28) 4318 | (84,12) 4319 | (228,53) 4320 | (1360,200) 4321 | (421,70) 4322 | (176,27) 4323 | (160,32) 4324 | (94,17) 4325 | (359,59) 4326 | (140,22) 4327 | (211,9) 4328 | (190,19) 4329 | (166,23) 4330 | (254,24) 4331 | (104,81) 4332 | (1071,272) 4333 | (201,6) 4334 | (215,18) 4335 | (173,18) 4336 | (170,43) 4337 | (669,74) 4338 | (245,60) 4339 | (94,23) 4340 | (2541,431) 4341 | (616,64) 4342 | (193,29) 4343 | (178,18) 4344 | (133,32) 4345 | (367,61) 4346 | (124,21) 4347 | (183,17) 4348 | (2291,323) 4349 | (222,30) 4350 | (276,42) 4351 | (572,131) 4352 | (281,37) 4353 | (4817,659) 4354 | (156,57) 4355 | (202,44) 4356 | (64,29) 4357 | (79,5) 4358 | (1465,163) 4359 | (671,116) 4360 | (98,7) 4361 | (139,18) 4362 | (358,78) 4363 | (214,48) 4364 | (297,57) 4365 | (167,19) 4366 | (939,138) 4367 | (97,23) 4368 | (74,51) 4369 | (130,13) 4370 | (98,18) 4371 | (158,39) 4372 | (196,29) 4373 | (832,122) 4374 | (87,14) 4375 | (83,15) 4376 | (82,12) 4377 | (1010,101) 4378 | (134,30) 4379 | (149,37) 4380 | (168,38) 4381 | (253,58) 4382 | (263,0) 4383 | (174,35) 4384 | (218,20) 4385 | (76,14) 4386 | (81,20) 4387 | (274,66) 4388 | (81,22) 4389 | (362,27) 4390 | (194,33) 4391 | (111,11) 4392 | (89,25) 4393 | (216,42) 4394 | (148,52) 4395 | (434,58) 4396 | (102,33) 4397 | (285,62) 4398 | (291,50) 4399 | (273,35) 4400 | (124,17) 4401 | (126,9) 4402 | (192,25) 4403 | (216,44) 4404 | (115,27) 4405 | (745,84) 4406 | (285,57) 4407 | (273,36) 4408 | (369,29) 4409 | (286,53) 4410 | (114,13) 4411 | (332,100) 4412 | (310,40) 4413 | (135,16) 4414 | (146,25) 4415 | (113,4) 4416 | (150,20) 4417 | (125,24) 4418 | (197,55) 4419 | (5380,9) 4420 | (55,13) 4421 | (1134,217) 4422 | (117,3) 4423 | (208,35) 4424 | (185,72) 4425 | (3102,579) 4426 | (251,67) 4427 | (134,25) 4428 | (1699,170) 4429 | (1677,402) 4430 | (354,121) 4431 | (95,20) 4432 | (157,24) 4433 | (516,95) 4434 | (851,210) 4435 | (335,68) 4436 | (93,16) 4437 | (156,22) 4438 | (2120,478) 4439 | (1030,244) 4440 | (444,49) 4441 | (272,58) 4442 | (94,21) 4443 | (210,42) 4444 | (312,32) 4445 | (679,112) 4446 | (916,154) 4447 | (452,45) 4448 | (190,31) 4449 | (603,90) 4450 | (123,44) 4451 | (92,32) 4452 | (56,13) 4453 | (102,15) 4454 | (81,18) 4455 | (176,29) 4456 | (82,41) 4457 | (35,27) 4458 | (47,21) 4459 | (90,25) 4460 | (169,78) 4461 | (84,84) 4462 | (250,109) 4463 | (99,64) 4464 | (90,64) 4465 | (67,39) 4466 | (82,32) 4467 | (61,37) 4468 | (426,57) 4469 | (213,159) 4470 | (115,71) 4471 | (275,176) 4472 | (140,86) 4473 | (133,34) 4474 | (83,31) 4475 | (88,62) 4476 | (84,50) 4477 | (53,18) 4478 | (129,35) 4479 | (141,42) 4480 | (46,26) 4481 | (11,28) 4482 | (130,80) 4483 | (129,43) 4484 | (199,112) 4485 | (66,39) 4486 | (116,18) 4487 | (126,27) 4488 | (258,13) 4489 | (98,41) 4490 | (354,70) 4491 | (160,41) 4492 | (182,24) 4493 | (230,57) 4494 | (167,47) 4495 | (35,35) 4496 | (50,40) 4497 | (76,34) 4498 | (9,25) 4499 | (5,54) 4500 | (140,10) 4501 | (64,13) 4502 | (54,30) 4503 | (64,9) 4504 | (118,45) 4505 | (52,9) 4506 | (185,137) 4507 | (162,61) 4508 | (16,26) 4509 | (24,29) 4510 | (72,37) 4511 | (144,57) 4512 | (34,38) 4513 | (113,84) 4514 | (101,63) 4515 | (186,13) 4516 | (129,5) 4517 | (175,34) 4518 | (80,14) 4519 | (160,21) 4520 | (155,71) 4521 | (87,0) 4522 | (223,14) 4523 | (72,27) 4524 | (84,13) 4525 | (93,8) 4526 | (94,9) 4527 | (62,34) 4528 | (45,38) 4529 | (18,43) 4530 | (5,46) 4531 | (3,47) 4532 | (22,132) 4533 | (9,74) 4534 | (14,71) 4535 | (2,98) 4536 | (19,96) 4537 | (6,104) 4538 | (12,138) 4539 | (4,102) 4540 | (9,83) 4541 | (4,75) 4542 | (17,33) 4543 | (2,60) 4544 | (5,101) 4545 | (2,47) 4546 | (20,92) 4547 | (2,56) 4548 | (6,107) 4549 | (8,94) 4550 | (1,112) 4551 | (3,98) 4552 | (10,32) 4553 | (1,86) 4554 | (15,81) 4555 | (8,36) 4556 | (3,73) 4557 | (5,84) 4558 | (3,120) 4559 | (8,235) 4560 | (4,43) 4561 | (1,141) 4562 | (5,106) 4563 | (2,62) 4564 | (4,83) 4565 | (5,168) 4566 | (1,71) 4567 | (6,68) 4568 | (11,34) 4569 | (2,150) 4570 | (29,253) 4571 | (2,50) 4572 | (3,87) 4573 | (2,46) 4574 | (4,109) 4575 | (2,59) 4576 | (11,55) 4577 | (11,45) 4578 | (3,83) 4579 | (9,155) 4580 | (7,67) 4581 | (5,65) 4582 | (20,35) 4583 | (3,167) 4584 | (26,88) 4585 | (6,41) 4586 | (13,30) 4587 | (4,35) 4588 | (107,15) 4589 | (132,12) 4590 | (250,22) 4591 | (130,17) 4592 | (103,15) 4593 | (321,16) 4594 | (81,6) 4595 | (125,41) 4596 | (129,53) 4597 | (217,67) 4598 | (128,23) 4599 | (131,12) 4600 | (378,33) 4601 | (130,12) 4602 | (433,37) 4603 | (74,13) 4604 | (134,12) 4605 | (367,40) 4606 | (83,18) 4607 | (103,43) 4608 | (233,30) 4609 | (129,23) 4610 | (86,4) 4611 | (102,54) 4612 | (33,25) 4613 | (70,65) 4614 | (39,61) 4615 | (51,68) 4616 | (37,37) 4617 | (80,6) 4618 | (44,66) 4619 | (38,49) 4620 | (36,72) 4621 | (52,41) 4622 | (172,138) 4623 | (57,92) 4624 | (438,347) 4625 | (50,42) 4626 | (25,38) 4627 | (19,40) 4628 | (29,25) 4629 | (41,26) 4630 | (15,35) 4631 | (18,24) 4632 | (51,43) 4633 | (46,33) 4634 | (49,43) 4635 | (49,80) 4636 | (47,45) 4637 | (23,22) 4638 | (59,40) 4639 | (13,29) 4640 | (30,35) 4641 | (50,54) 4642 | (38,76) 4643 | (27,48) 4644 | (66,45) 4645 | (104,2) 4646 | (24,26) 4647 | (56,34) 4648 | (77,11) 4649 | (241,24) 4650 | (61,30) 4651 | (57,22) 4652 | (78,1) 4653 | (73,7) 4654 | (84,9) 4655 | (72,6) 4656 | (46,17) 4657 | (92,51) 4658 | (65,25) 4659 | (129,16) 4660 | (138,46) 4661 | (32,21) 4662 | (116,4) 4663 | (119,34) 4664 | (67,2) 4665 | (34,47) 4666 | (80,39) 4667 | (116,42) 4668 | (120,35) 4669 | (67,76) 4670 | (54,14) 4671 | (58,15) 4672 | (40,25) 4673 | (101,37) 4674 | (73,29) 4675 | (76,24) 4676 | (85,35) 4677 | (170,3) 4678 | (183,54) 4679 | (34,42) 4680 | (97,12) 4681 | (68,29) 4682 | (46,41) 4683 | (160,17) 4684 | (174,27) 4685 | (108,9) 4686 | (6,60) 4687 | (199,58) 4688 | (18,39) 4689 | (27,59) 4690 | (47,242) 4691 | (141,36) 4692 | (47,31) 4693 | (55,32) 4694 | (218,237) 4695 | (73,25) 4696 | (35,42) 4697 | (60,25) 4698 | (94,49) 4699 | (95,4) 4700 | (21,60) 4701 | (8,48) 4702 | (126,54) 4703 | (62,73) 4704 | (69,25) 4705 | (13,27) 4706 | (29,41) 4707 | (25,94) 4708 | (32,35) 4709 | (18,26) 4710 | (10,35) 4711 | (23,30) 4712 | (4,71) 4713 | (11,36) 4714 | (24,42) 4715 | (18,74) 4716 | (31,59) 4717 | (66,42) 4718 | (37,28) 4719 | (86,32) 4720 | (29,37) 4721 | (93,29) 4722 | (98,17) 4723 | (18,22) 4724 | (560,16) 4725 | (30,32) 4726 | (212,37) 4727 | (14,31) 4728 | (67,34) 4729 | (29,44) 4730 | (100,57) 4731 | (129,39) 4732 | (20,40) 4733 | (29,67) 4734 | (42,61) 4735 | (116,57) 4736 | (65,33) 4737 | (72,74) 4738 | (66,12) 4739 | (24,31) 4740 | (70,52) 4741 | (64,28) 4742 | (116,37) 4743 | (173,69) 4744 | (97,47) 4745 | (74,58) 4746 | (56,65) 4747 | (59,83) 4748 | (164,69) 4749 | (39,29) 4750 | (132,132) 4751 | (129,134) 4752 | (55,79) 4753 | (82,60) 4754 | (22,30) 4755 | (35,49) 4756 | (35,33) 4757 | (171,302) 4758 | (37,104) 4759 | (17,37) 4760 | (31,38) 4761 | (163,70) 4762 | (48,56) 4763 | (127,41) 4764 | (247,178) 4765 | (75,31) 4766 | (114,91) 4767 | (80,50) 4768 | (44,28) 4769 | (245,14) 4770 | (73,31) 4771 | (463,2) 4772 | (260,2) 4773 | (275,39) 4774 | (71,6) 4775 | (65,50) 4776 | (41,37) 4777 | (58,37) 4778 | (97,20) 4779 | (118,17) 4780 | (131,21) 4781 | (234,45) 4782 | (97,48) 4783 | (91,48) 4784 | (81,17) 4785 | (73,16) 4786 | (74,19) 4787 | (132,6) 4788 | (82,8) 4789 | (179,44) 4790 | (316,67) 4791 | (60,20) 4792 | (131,41) 4793 | (148,28) 4794 | (153,62) 4795 | }; 4796 | \end{axis}\end{tikzpicture} 4797 | -------------------------------------------------------------------------------- /paper/main.bib: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | # 3 | # Copyright (c) 2020 Yegor Bugayenko 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included 13 | # in all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /paper/total.tex: -------------------------------------------------------------------------------- 1 | \def\thetotalrepos{0} 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yegor256/names-vs-complexity/f3493b8411a1b9ed28537a0fd8806c3642e29185/requirements.txt --------------------------------------------------------------------------------